BentoML Example: Fast AI Pet Image classification

This is a BentoML Demo Project based on Fast AI course v3 lesson one, training an image classifier with Fast AI that detect the different breed of cat and dog.

BentoML is an open source platform for machine learning model serving and deployment. In this project we will use BentoML to package the image classifier model, and build a containerized REST API model server.

Make sure to use GPU runtime when running this notebook in Google Colab, you can set it in top menu: Runtime > Change Runtime Type > Hardware accelerator.

Impression

In [1]:
%reload_ext autoreload
%autoreload 2
%matplotlib inline
In [ ]:
!pip install bentoml
!pip install fastai
In [2]:
from fastai.vision import *
from fastai.metrics import error_rate

Prepare Training Data

In [3]:
path = untar_data(URLs.PETS)
path_anno = path/'annotations'
path_img = path/'images'
In [4]:
fnames = get_image_files(path_img)
fnames[:5]
Out[4]:
[PosixPath('/Users/bozhaoyu/.fastai/data/oxford-iiit-pet/images/Egyptian_Mau_167.jpg'),
 PosixPath('/Users/bozhaoyu/.fastai/data/oxford-iiit-pet/images/pug_52.jpg'),
 PosixPath('/Users/bozhaoyu/.fastai/data/oxford-iiit-pet/images/basset_hound_112.jpg'),
 PosixPath('/Users/bozhaoyu/.fastai/data/oxford-iiit-pet/images/Siamese_193.jpg'),
 PosixPath('/Users/bozhaoyu/.fastai/data/oxford-iiit-pet/images/shiba_inu_122.jpg')]
In [5]:
#bs = 64
bs = 16   # uncomment this line if you run out of memory even after clicking Kernel->Restart

np.random.seed(2)
pat = r'/([^/]+)_\d+.jpg$'

data = ImageDataBunch.from_name_re(
    path_img,
    fnames,
    pat,
    num_workers=0,
    ds_tfms=get_transforms(),
    size=224,
    bs=bs
).normalize(imagenet_stats)
In [6]:
data.show_batch(rows=3, figsize=(7,6))

Training: resnet34

Now we will start training the model. For demo purpose, we will only train for 1 epoch (1 cycle through all the data).

In [7]:
learn = cnn_learner(data, models.resnet34, metrics=error_rate)

learn.model
Out[7]:
Sequential(
  (0): Sequential(
    (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
    (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU(inplace)
    (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
    (4): Sequential(
      (0): BasicBlock(
        (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
      (1): BasicBlock(
        (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
      (2): BasicBlock(
        (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
    )
    (5): Sequential(
      (0): BasicBlock(
        (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (downsample): Sequential(
          (0): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 2), bias=False)
          (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        )
      )
      (1): BasicBlock(
        (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
      (2): BasicBlock(
        (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
      (3): BasicBlock(
        (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
    )
    (6): Sequential(
      (0): BasicBlock(
        (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (downsample): Sequential(
          (0): Conv2d(128, 256, kernel_size=(1, 1), stride=(2, 2), bias=False)
          (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        )
      )
      (1): BasicBlock(
        (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
      (2): BasicBlock(
        (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
      (3): BasicBlock(
        (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
      (4): BasicBlock(
        (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
      (5): BasicBlock(
        (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
    )
    (7): Sequential(
      (0): BasicBlock(
        (conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (downsample): Sequential(
          (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)
          (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        )
      )
      (1): BasicBlock(
        (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
      (2): BasicBlock(
        (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
        (relu): ReLU(inplace)
        (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
        (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      )
    )
  )
  (1): Sequential(
    (0): AdaptiveConcatPool2d(
      (ap): AdaptiveAvgPool2d(output_size=1)
      (mp): AdaptiveMaxPool2d(output_size=1)
    )
    (1): Flatten()
    (2): BatchNorm1d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (3): Dropout(p=0.25)
    (4): Linear(in_features=1024, out_features=512, bias=True)
    (5): ReLU(inplace)
    (6): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (7): Dropout(p=0.5)
    (8): Linear(in_features=512, out_features=37, bias=True)
  )
)
In [8]:
learn.fit_one_cycle(1)
epoch train_loss valid_loss error_rate time
0 0.632662 0.286825 0.098106 33:15

Create BentoService for model serving

In [9]:
%%writefile pet_classification.py

from bentoml import BentoService, api, env, artifacts
from bentoml.artifact import FastaiModelArtifact
from bentoml.handlers import FastaiImageHandler

@env(pip_dependencies=['fastai'])
@artifacts([FastaiModelArtifact('pet_classifer')])
class PetClassification(BentoService):
    
    @api(FastaiImageHandler)
    def predict(self, image):
        result = self.artifacts.pet_classifer.predict(image)
        return str(result)
Overwriting pet_classification.py

Save BentoService to file archive

In [10]:
# 1) import the custom BentoService defined above
from pet_classification import PetClassification

# 2) `pack` it with required artifacts
service = PetClassification()
service.pack('pet_classifer', learn)

# 3) save your BentoSerivce
saved_path = service.save()
[2020-01-22 12:21:28,465] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
[2020-01-22 12:21:28,824] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
[2020-01-22 12:21:45,697] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
running sdist
running egg_info
writing BentoML.egg-info/PKG-INFO
writing dependency_links to BentoML.egg-info/dependency_links.txt
writing entry points to BentoML.egg-info/entry_points.txt
writing requirements to BentoML.egg-info/requires.txt
writing top-level names to BentoML.egg-info/top_level.txt
reading manifest file 'BentoML.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
no previously-included directories found matching 'examples'
no previously-included directories found matching 'tests'
no previously-included directories found matching 'docs'
warning: no previously-included files matching '*~' found anywhere in distribution
warning: no previously-included files matching '*.pyo' found anywhere in distribution
warning: no previously-included files matching '.git' found anywhere in distribution
warning: no previously-included files matching '.ipynb_checkpoints' found anywhere in distribution
warning: no previously-included files matching '__pycache__' found anywhere in distribution
writing manifest file 'BentoML.egg-info/SOURCES.txt'
running check
warning: check: missing meta-data: if 'author' supplied, 'author_email' must be supplied too

creating BentoML-0.5.8+23.g1dd72d3
creating BentoML-0.5.8+23.g1dd72d3/BentoML.egg-info
creating BentoML-0.5.8+23.g1dd72d3/bentoml
creating BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
creating BentoML-0.5.8+23.g1dd72d3/bentoml/bundler
creating BentoML-0.5.8+23.g1dd72d3/bentoml/cli
creating BentoML-0.5.8+23.g1dd72d3/bentoml/clipper
creating BentoML-0.5.8+23.g1dd72d3/bentoml/configuration
creating BentoML-0.5.8+23.g1dd72d3/bentoml/deployment
creating BentoML-0.5.8+23.g1dd72d3/bentoml/deployment/aws_lambda
creating BentoML-0.5.8+23.g1dd72d3/bentoml/deployment/sagemaker
creating BentoML-0.5.8+23.g1dd72d3/bentoml/handlers
creating BentoML-0.5.8+23.g1dd72d3/bentoml/migrations
creating BentoML-0.5.8+23.g1dd72d3/bentoml/migrations/versions
creating BentoML-0.5.8+23.g1dd72d3/bentoml/proto
creating BentoML-0.5.8+23.g1dd72d3/bentoml/repository
creating BentoML-0.5.8+23.g1dd72d3/bentoml/server
creating BentoML-0.5.8+23.g1dd72d3/bentoml/server/static
creating BentoML-0.5.8+23.g1dd72d3/bentoml/utils
creating BentoML-0.5.8+23.g1dd72d3/bentoml/utils/validator
creating BentoML-0.5.8+23.g1dd72d3/bentoml/yatai
creating BentoML-0.5.8+23.g1dd72d3/bentoml/yatai/client
copying files to BentoML-0.5.8+23.g1dd72d3...
copying LICENSE -> BentoML-0.5.8+23.g1dd72d3
copying MANIFEST.in -> BentoML-0.5.8+23.g1dd72d3
copying README.md -> BentoML-0.5.8+23.g1dd72d3
copying pyproject.toml -> BentoML-0.5.8+23.g1dd72d3
copying setup.cfg -> BentoML-0.5.8+23.g1dd72d3
copying setup.py -> BentoML-0.5.8+23.g1dd72d3
copying versioneer.py -> BentoML-0.5.8+23.g1dd72d3
copying BentoML.egg-info/PKG-INFO -> BentoML-0.5.8+23.g1dd72d3/BentoML.egg-info
copying BentoML.egg-info/SOURCES.txt -> BentoML-0.5.8+23.g1dd72d3/BentoML.egg-info
copying BentoML.egg-info/dependency_links.txt -> BentoML-0.5.8+23.g1dd72d3/BentoML.egg-info
copying BentoML.egg-info/entry_points.txt -> BentoML-0.5.8+23.g1dd72d3/BentoML.egg-info
copying BentoML.egg-info/requires.txt -> BentoML-0.5.8+23.g1dd72d3/BentoML.egg-info
copying BentoML.egg-info/top_level.txt -> BentoML-0.5.8+23.g1dd72d3/BentoML.egg-info
copying bentoml/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml
copying bentoml/_version.py -> BentoML-0.5.8+23.g1dd72d3/bentoml
copying bentoml/alembic.ini -> BentoML-0.5.8+23.g1dd72d3/bentoml
copying bentoml/db.py -> BentoML-0.5.8+23.g1dd72d3/bentoml
copying bentoml/exceptions.py -> BentoML-0.5.8+23.g1dd72d3/bentoml
copying bentoml/service.py -> BentoML-0.5.8+23.g1dd72d3/bentoml
copying bentoml/service_env.py -> BentoML-0.5.8+23.g1dd72d3/bentoml
copying bentoml/artifact/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
copying bentoml/artifact/artifact.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
copying bentoml/artifact/fastai_model_artifact.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
copying bentoml/artifact/h2o_model_artifact.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
copying bentoml/artifact/keras_model_artifact.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
copying bentoml/artifact/lightgbm_model_artifact.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
copying bentoml/artifact/pickle_artifact.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
copying bentoml/artifact/pytorch_model_artifact.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
copying bentoml/artifact/sklearn_model_artifact.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
copying bentoml/artifact/text_file_artifact.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
copying bentoml/artifact/tf_savedmodel_artifact.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
copying bentoml/artifact/xgboost_model_artifact.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/artifact
copying bentoml/bundler/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/bundler
copying bentoml/bundler/bundler.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/bundler
copying bentoml/bundler/config.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/bundler
copying bentoml/bundler/loader.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/bundler
copying bentoml/bundler/py_module_utils.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/bundler
copying bentoml/bundler/templates.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/bundler
copying bentoml/bundler/utils.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/bundler
copying bentoml/cli/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/cli
copying bentoml/cli/aws_lambda.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/cli
copying bentoml/cli/aws_sagemaker.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/cli
copying bentoml/cli/bento.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/cli
copying bentoml/cli/click_utils.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/cli
copying bentoml/cli/config.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/cli
copying bentoml/cli/deployment.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/cli
copying bentoml/cli/utils.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/cli
copying bentoml/clipper/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/clipper
copying bentoml/configuration/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/configuration
copying bentoml/configuration/configparser.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/configuration
copying bentoml/configuration/default_bentoml.cfg -> BentoML-0.5.8+23.g1dd72d3/bentoml/configuration
copying bentoml/deployment/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/deployment
copying bentoml/deployment/operator.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/deployment
copying bentoml/deployment/store.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/deployment
copying bentoml/deployment/utils.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/deployment
copying bentoml/deployment/aws_lambda/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/deployment/aws_lambda
copying bentoml/deployment/aws_lambda/download_extra_resources.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/deployment/aws_lambda
copying bentoml/deployment/aws_lambda/lambda_app.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/deployment/aws_lambda
copying bentoml/deployment/aws_lambda/utils.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/deployment/aws_lambda
copying bentoml/deployment/sagemaker/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/deployment/sagemaker
copying bentoml/deployment/sagemaker/sagemaker_nginx.conf -> BentoML-0.5.8+23.g1dd72d3/bentoml/deployment/sagemaker
copying bentoml/deployment/sagemaker/sagemaker_serve.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/deployment/sagemaker
copying bentoml/deployment/sagemaker/sagemaker_wsgi.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/deployment/sagemaker
copying bentoml/handlers/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/handlers
copying bentoml/handlers/base_handlers.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/handlers
copying bentoml/handlers/clipper_handler.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/handlers
copying bentoml/handlers/dataframe_handler.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/handlers
copying bentoml/handlers/fastai_image_handler.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/handlers
copying bentoml/handlers/image_handler.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/handlers
copying bentoml/handlers/json_handler.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/handlers
copying bentoml/handlers/pytorch_tensor_handler.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/handlers
copying bentoml/handlers/tensorflow_tensor_handler.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/handlers
copying bentoml/handlers/utils.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/handlers
copying bentoml/migrations/README -> BentoML-0.5.8+23.g1dd72d3/bentoml/migrations
copying bentoml/migrations/env.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/migrations
copying bentoml/migrations/script.py.mako -> BentoML-0.5.8+23.g1dd72d3/bentoml/migrations
copying bentoml/migrations/versions/a6b00ae45279_add_last_updated_at_for_deployments.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/migrations/versions
copying bentoml/proto/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/proto
copying bentoml/proto/deployment_pb2.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/proto
copying bentoml/proto/repository_pb2.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/proto
copying bentoml/proto/status_pb2.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/proto
copying bentoml/proto/yatai_service_pb2.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/proto
copying bentoml/proto/yatai_service_pb2_grpc.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/proto
copying bentoml/repository/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/repository
copying bentoml/repository/metadata_store.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/repository
copying bentoml/server/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/server
copying bentoml/server/bento_api_server.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/server
copying bentoml/server/bento_sagemaker_server.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/server
copying bentoml/server/gunicorn_config.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/server
copying bentoml/server/gunicorn_server.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/server
copying bentoml/server/middlewares.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/server
copying bentoml/server/utils.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/server
copying bentoml/server/static/swagger-ui-bundle.js -> BentoML-0.5.8+23.g1dd72d3/bentoml/server/static
copying bentoml/server/static/swagger-ui.css -> BentoML-0.5.8+23.g1dd72d3/bentoml/server/static
copying bentoml/utils/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/utils
copying bentoml/utils/cloudpickle.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/utils
copying bentoml/utils/hybirdmethod.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/utils
copying bentoml/utils/log.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/utils
copying bentoml/utils/s3.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/utils
copying bentoml/utils/tempdir.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/utils
copying bentoml/utils/usage_stats.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/utils
copying bentoml/utils/validator/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/utils/validator
copying bentoml/yatai/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/yatai
copying bentoml/yatai/deployment_utils.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/yatai
copying bentoml/yatai/status.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/yatai
copying bentoml/yatai/yatai_service_impl.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/yatai
copying bentoml/yatai/client/__init__.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/yatai/client
copying bentoml/yatai/client/bento_repository_api.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/yatai/client
copying bentoml/yatai/client/deployment_api.py -> BentoML-0.5.8+23.g1dd72d3/bentoml/yatai/client
Writing BentoML-0.5.8+23.g1dd72d3/setup.cfg
UPDATING BentoML-0.5.8+23.g1dd72d3/bentoml/_version.py
set BentoML-0.5.8+23.g1dd72d3/bentoml/_version.py to '0.5.8+23.g1dd72d3'
Creating tar archive
removing 'BentoML-0.5.8+23.g1dd72d3' (and everything under it)
[2020-01-22 12:21:47,127] INFO - BentoService bundle 'PetClassification:20200122122128_513734' created at: /private/var/folders/kn/xnc9k74x03567n1mx2tfqnpr0000gn/T/bentoml-temp-hamf2823
[2020-01-22 12:21:47,129] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
[2020-01-22 12:21:47,140] WARNING - Saved BentoService bundle version mismatch: loading BentoServie bundle create with BentoML version 0.5.8,  but loading from BentoML version 0.5.8+23.g1dd72d3
[2020-01-22 12:21:47,402] INFO - BentoService bundle 'PetClassification:20200122122128_513734' created at: /Users/bozhaoyu/bentoml/repository/PetClassification/20200122122128_513734
In [13]:
print(f'{service.name}:{service.version}')
PetClassification:20200122122128_513734

Load saved BentoService for serving

In [12]:
from bentoml import load

service = load(saved_path)

print(service.predict(data.get(0)))
[2019-09-17 15:20:59,886] WARNING - Module `pet_classification` already loaded, using existing imported module.
(Category Egyptian_Mau, tensor(5), tensor([8.1198e-05, 4.7572e-03, 8.4651e-06, 7.2410e-04, 4.4823e-04, 9.9232e-01,
        1.2686e-04, 8.9391e-06, 3.2297e-05, 2.6294e-04, 1.2570e-05, 1.7887e-04,
        2.3823e-05, 1.0635e-05, 3.7823e-06, 2.6734e-05, 4.9237e-05, 3.0513e-05,
        5.5845e-05, 7.1444e-05, 3.7852e-04, 1.9912e-05, 4.3253e-06, 2.8950e-05,
        7.1766e-06, 5.2756e-06, 1.9716e-05, 2.6185e-06, 9.0641e-05, 1.7248e-05,
        9.3070e-06, 3.1759e-05, 7.4544e-05, 1.3818e-05, 2.7183e-05, 1.8018e-05,
        1.3240e-05]))

Access your BentoService from Command Line

BentoML makes it very easy to install prediction service as CLI tool:

In [ ]:
# copy an image from fastai data for testing model serving service:
!mv {path_img}/yorkshire_terrier_98.jpg ./test.jpg

Use bentoml get <bento service name> to list all of its versions

In [14]:
!bentoml get {service.name}
BENTO_SERVICE                            CREATED_AT        URI                                                                         APIS                         ARTIFACTS
PetClassification:20200122122128_513734  2020-01-22 20:21  /Users/bozhaoyu/bentoml/repository/PetClassification/20200122122128_513734  predict::FastaiImageHandler  pet_classifer::FastaiModelArtifact

With bentoml get <bento service name:bento service version> access additional information on BentoService

In [20]:
!bentoml get {service.name}:{service.version}
{
  "name": "PetClassification",
  "version": "20200122122128_513734",
  "uri": {
    "type": "LOCAL",
    "uri": "/Users/bozhaoyu/bentoml/repository/PetClassification/20200122122128_513734"
  },
  "bentoServiceMetadata": {
    "name": "PetClassification",
    "version": "20200122122128_513734",
    "createdAt": "2020-01-22T20:21:45.698337Z",
    "env": {
      "condaEnv": "name: bentoml-PetClassification\nchannels:\n- defaults\ndependencies:\n- python=3.7.3\n- pip\n",
      "pipDependencies": "bentoml==0.5.8\nfastai\nimageio\nfastai",
      "pythonVersion": "3.7.3"
    },
    "artifacts": [
      {
        "name": "pet_classifer",
        "artifactType": "FastaiModelArtifact"
      }
    ],
    "apis": [
      {
        "name": "predict",
        "handlerType": "FastaiImageHandler",
        "docs": "BentoService API"
      }
    ]
  }
}

Using the CLI to make inferencing is super easy, just call bentoml run command

In [16]:
uri = "/Users/bozhaoyu/bentoml/repository/PetClassification/20200122122128_513734"
In [17]:
!bentoml run predict {uri} --input=test.jpg
[2020-01-22 12:50:18,951] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
[2020-01-22 12:50:18,964] WARNING - Saved BentoService bundle version mismatch: loading BentoServie bundle create with BentoML version 0.5.8,  but loading from BentoML version 0.5.8+23.g1dd72d3
[2020-01-22 12:50:22,038] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
[2020-01-22 12:50:22,157] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
(Category yorkshire_terrier, tensor(36), tensor([6.5418e-06, 1.1117e-06, 1.4023e-06, 1.2001e-06, 1.4748e-07, 5.9564e-08,
        1.6650e-06, 1.6947e-06, 1.4603e-07, 8.4881e-08, 8.7069e-07, 3.1522e-07,
        7.8667e-08, 3.8861e-07, 1.8602e-06, 8.0380e-06, 6.4890e-07, 5.7006e-06,
        3.4203e-06, 6.0791e-08, 1.5988e-07, 1.5740e-07, 8.2322e-06, 1.0582e-06,
        2.8686e-07, 3.3809e-07, 2.8787e-05, 6.6988e-08, 8.7025e-06, 2.5589e-07,
        1.6868e-07, 1.1191e-07, 3.5333e-06, 2.2819e-07, 7.3852e-07, 5.6413e-07,
        9.9991e-01]))

BentoService Serving via REST API

In your termnial, run the following command to start the REST API server:

In [18]:
!bentoml serve {saved_path}
[2020-01-22 13:21:07,154] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
[2020-01-22 13:21:07,168] WARNING - Saved BentoService bundle version mismatch: loading BentoServie bundle create with BentoML version 0.5.8,  but loading from BentoML version 0.5.8+23.g1dd72d3
[2020-01-22 13:21:10,253] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
[2020-01-22 13:21:10,382] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
 * Serving Flask app "PetClassification" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
^C

Open http://127.0.0.1:5000 to see more information about the REST APIs server in your browser.

Send prediction requeset to the REST API server

Navigate to parent directory of the notebook(so you have reference to the test.jpg image), and run the following curl command to send the image to REST API server and get a prediction result:

curl -i \
    --request POST \
    --header "Content-Type: multipart/form-data" \
    -F "image=@test.jpg" \
    localhost:5000/predict

Use BentoService bundle as PyPI package

In [21]:
!pip install {saved_path}
Processing /Users/bozhaoyu/bentoml/repository/PetClassification/20200122122128_513734
Requirement already satisfied: bentoml==0.5.8 in /Users/bozhaoyu/src/bento (from PetClassification==20200122122128-513734) (0.5.8+23.g1dd72d3)
Requirement already satisfied: fastai in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from PetClassification==20200122122128-513734) (1.0.54)
Requirement already satisfied: imageio in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from PetClassification==20200122122128-513734) (2.5.0)
Requirement already satisfied: ruamel.yaml>=0.15.0 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (0.15.99)
Requirement already satisfied: numpy in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (1.16.4)
Requirement already satisfied: flask in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (1.0.4)
Requirement already satisfied: gunicorn in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (19.9.0)
Requirement already satisfied: click>=7.0 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (7.0)
Requirement already satisfied: pandas in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (0.24.2)
Requirement already satisfied: prometheus_client in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (0.7.1)
Requirement already satisfied: python-json-logger in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (0.1.11)
Requirement already satisfied: boto3 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (1.10.42)
Requirement already satisfied: requests in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (2.22.0)
Requirement already satisfied: packaging in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (19.0)
Requirement already satisfied: docker in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (4.1.0)
Requirement already satisfied: configparser in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (3.7.4)
Requirement already satisfied: sqlalchemy>=1.3.0 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (1.3.6)
Requirement already satisfied: protobuf>=3.6.0 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (3.7.0)
Requirement already satisfied: grpcio in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (1.22.0)
Requirement already satisfied: cerberus in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (1.3.1)
Requirement already satisfied: tabulate in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (0.8.3)
Requirement already satisfied: humanfriendly in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (4.18)
Requirement already satisfied: alembic in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (1.2.1)
Requirement already satisfied: python-dateutil<2.8.1,>=2.1 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from bentoml==0.5.8->PetClassification==20200122122128-513734) (2.8.0)
Requirement already satisfied: Pillow in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (6.0.0)
Requirement already satisfied: spacy>=2.0.18 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (2.1.4)
Requirement already satisfied: typing in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (3.7.4)
Requirement already satisfied: beautifulsoup4 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (4.7.1)
Requirement already satisfied: nvidia-ml-py3 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (7.352.0)
Requirement already satisfied: bottleneck in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (1.2.1)
Requirement already satisfied: matplotlib in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (3.1.1)
Requirement already satisfied: pyyaml in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (5.1)
Requirement already satisfied: torch>=1.0.0 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (1.0.1.post2)
Requirement already satisfied: torchvision in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (0.2.2)
Requirement already satisfied: fastprogress>=0.1.19 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (0.1.21)
Requirement already satisfied: numexpr in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (2.6.9)
Requirement already satisfied: pynvx>=1.0.0; platform_system == "Darwin" in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (1.0.0)
Requirement already satisfied: scipy in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from fastai->PetClassification==20200122122128-513734) (1.2.1)
Requirement already satisfied: itsdangerous>=0.24 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from flask->bentoml==0.5.8->PetClassification==20200122122128-513734) (1.1.0)
Requirement already satisfied: Werkzeug>=0.14 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from flask->bentoml==0.5.8->PetClassification==20200122122128-513734) (0.15.4)
Requirement already satisfied: Jinja2>=2.10 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from flask->bentoml==0.5.8->PetClassification==20200122122128-513734) (2.10.1)
Requirement already satisfied: pytz>=2011k in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from pandas->bentoml==0.5.8->PetClassification==20200122122128-513734) (2019.1)
Requirement already satisfied: s3transfer<0.3.0,>=0.2.0 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from boto3->bentoml==0.5.8->PetClassification==20200122122128-513734) (0.2.1)
Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from boto3->bentoml==0.5.8->PetClassification==20200122122128-513734) (0.9.4)
Requirement already satisfied: botocore<1.14.0,>=1.13.42 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from boto3->bentoml==0.5.8->PetClassification==20200122122128-513734) (1.13.42)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from requests->bentoml==0.5.8->PetClassification==20200122122128-513734) (1.24.1)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from requests->bentoml==0.5.8->PetClassification==20200122122128-513734) (2019.11.28)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from requests->bentoml==0.5.8->PetClassification==20200122122128-513734) (3.0.4)
Requirement already satisfied: idna<2.9,>=2.5 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from requests->bentoml==0.5.8->PetClassification==20200122122128-513734) (2.8)
Requirement already satisfied: six in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from packaging->bentoml==0.5.8->PetClassification==20200122122128-513734) (1.14.0)
Requirement already satisfied: pyparsing>=2.0.2 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from packaging->bentoml==0.5.8->PetClassification==20200122122128-513734) (2.4.0)
Requirement already satisfied: websocket-client>=0.32.0 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from docker->bentoml==0.5.8->PetClassification==20200122122128-513734) (0.57.0)
Requirement already satisfied: setuptools in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from protobuf>=3.6.0->bentoml==0.5.8->PetClassification==20200122122128-513734) (45.1.0.post20200119)
Requirement already satisfied: python-editor>=0.3 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from alembic->bentoml==0.5.8->PetClassification==20200122122128-513734) (1.0.4)
Requirement already satisfied: Mako in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from alembic->bentoml==0.5.8->PetClassification==20200122122128-513734) (1.1.0)
Requirement already satisfied: jsonschema<3.1.0,>=2.6.0 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from spacy>=2.0.18->fastai->PetClassification==20200122122128-513734) (2.6.0)
Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from spacy>=2.0.18->fastai->PetClassification==20200122122128-513734) (2.0.2)
Requirement already satisfied: preshed<2.1.0,>=2.0.1 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from spacy>=2.0.18->fastai->PetClassification==20200122122128-513734) (2.0.1)
Requirement already satisfied: thinc<7.1.0,>=7.0.2 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from spacy>=2.0.18->fastai->PetClassification==20200122122128-513734) (7.0.4)
Requirement already satisfied: plac<1.0.0,>=0.9.6 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from spacy>=2.0.18->fastai->PetClassification==20200122122128-513734) (0.9.6)
Requirement already satisfied: wasabi<1.1.0,>=0.2.0 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from spacy>=2.0.18->fastai->PetClassification==20200122122128-513734) (0.2.2)
Requirement already satisfied: srsly<1.1.0,>=0.0.5 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from spacy>=2.0.18->fastai->PetClassification==20200122122128-513734) (0.0.7)
Requirement already satisfied: blis<0.3.0,>=0.2.2 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from spacy>=2.0.18->fastai->PetClassification==20200122122128-513734) (0.2.4)
Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from spacy>=2.0.18->fastai->PetClassification==20200122122128-513734) (1.0.2)
Requirement already satisfied: soupsieve>=1.2 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from beautifulsoup4->fastai->PetClassification==20200122122128-513734) (1.9.2)
Requirement already satisfied: cycler>=0.10 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from matplotlib->fastai->PetClassification==20200122122128-513734) (0.10.0)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from matplotlib->fastai->PetClassification==20200122122128-513734) (1.1.0)
Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from Jinja2>=2.10->flask->bentoml==0.5.8->PetClassification==20200122122128-513734) (1.1.1)
Requirement already satisfied: docutils<0.16,>=0.10 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from botocore<1.14.0,>=1.13.42->boto3->bentoml==0.5.8->PetClassification==20200122122128-513734) (0.15.2)
Requirement already satisfied: tqdm<5.0.0,>=4.10.0 in /usr/local/anaconda3/envs/dev-py3/lib/python3.7/site-packages (from thinc<7.1.0,>=7.0.2->spacy>=2.0.18->fastai->PetClassification==20200122122128-513734) (4.32.2)
Building wheels for collected packages: PetClassification
  Building wheel for PetClassification (setup.py) ... done
  Created wheel for PetClassification: filename=PetClassification-20200122122128.post513734-cp37-none-any.whl size=81272467 sha256=b3848ed938ccfea4495698a0af3eceb49d9876933dde555aa8694bb66960f265
  Stored in directory: /private/var/folders/kn/xnc9k74x03567n1mx2tfqnpr0000gn/T/pip-ephem-wheel-cache-1smryvrk/wheels/e4/8a/56/7bf3909a1686a06fc98f22e877ba89408da8f4b43485acfd93
Successfully built PetClassification
Installing collected packages: PetClassification
  Found existing installation: PetClassification 2019-07-15-cf19d4f2
    Uninstalling PetClassification-2019-07-15-cf19d4f2:
      Successfully uninstalled PetClassification-2019-07-15-cf19d4f2
Successfully installed PetClassification-20200122122128.post513734

The installed PyPI package also provide customized CLI command

In [24]:
!PetClassification run predict --input=test.jpg
[2020-01-22 14:44:25,718] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
[2020-01-22 14:44:25,729] WARNING - Saved BentoService bundle version mismatch: loading BentoServie bundle create with BentoML version 0.5.8,  but loading from BentoML version 0.5.8+23.g1dd72d3
[2020-01-22 14:44:25,731] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
[2020-01-22 14:44:25,827] WARNING - BentoML local changes detected - Local BentoML repository including all code changes will be bundled together with the BentoService bundle. When used with docker, the base docker image will be default to same version as last PyPI release at version: 0.5.8. You can also force bentoml to use a specific version for deploying your BentoService bundle, by setting the config 'core/bentoml_deploy_version' to a pinned version or your custom BentoML on github, e.g.:'bentoml_deploy_version = git+https://github.com/{username}/bentoml.git@{branch}'
(Category yorkshire_terrier, tensor(36), tensor([6.5418e-06, 1.1117e-06, 1.4023e-06, 1.2001e-06, 1.4748e-07, 5.9564e-08,
        1.6650e-06, 1.6947e-06, 1.4603e-07, 8.4881e-08, 8.7069e-07, 3.1522e-07,
        7.8667e-08, 3.8861e-07, 1.8602e-06, 8.0380e-06, 6.4890e-07, 5.7006e-06,
        3.4203e-06, 6.0791e-08, 1.5988e-07, 1.5740e-07, 8.2322e-06, 1.0582e-06,
        2.8686e-07, 3.3809e-07, 2.8787e-05, 6.6988e-08, 8.7025e-06, 2.5589e-07,
        1.6868e-07, 1.1191e-07, 3.5333e-06, 2.2819e-07, 7.3852e-07, 5.6413e-07,
        9.9991e-01]))

Containerize REST API server with Docker

The BentoService SavedBundle is structured to work as a docker build context, that can be directed used to build a docker image for API server. Simply use it as the docker build context directory:

In [ ]:
!cd {saved_path} && docker build -t pet-classification .
Sending build context to Docker daemon  88.05MB
Step 1/12 : FROM continuumio/miniconda3:4.7.12
 ---> 406f2b43ea59
Step 2/12 : ENTRYPOINT [ "/bin/bash", "-c" ]
 ---> Using cache
 ---> 9396b863b5c4
Step 3/12 : EXPOSE 5000
 ---> Using cache
 ---> b30397557310
Step 4/12 : RUN set -x      && apt-get update      && apt-get install --no-install-recommends --no-install-suggests -y libpq-dev build-essential      && rm -rf /var/lib/apt/lists/*
 ---> Using cache
 ---> 1fa8a63ec27d
Step 5/12 : RUN conda install pip numpy scipy       && pip install gunicorn
 ---> Using cache
 ---> af9be1b65cf4
Step 6/12 : COPY . /bento
 ---> 221f9364ab6d
Step 7/12 : WORKDIR /bento
 ---> Running in 41677667d892
Removing intermediate container 41677667d892
 ---> af80125d1b64
Step 8/12 : RUN if [ -f /bento/setup.sh ]; then /bin/bash -c /bento/setup.sh; fi
 ---> Running in 8862cf6b38f4
Removing intermediate container 8862cf6b38f4
 ---> 2de3ccf706cd
Step 9/12 : RUN conda env update -n base -f /bento/environment.yml
 ---> Running in 2a3240cfdbc3
Collecting package metadata (repodata.json): ...working... done
Solving environment: ...working... done

Downloading and Extracting Packages
python-3.7.3         | 32.1 MB   | ########## | 100% 
Preparing transaction: ...working... done
Verifying transaction: ...working... done
Executing transaction: ...working... done
#
# To activate this environment, use
#
#     $ conda activate base
#
# To deactivate an active environment, use
#
#     $ conda deactivate

Removing intermediate container 2a3240cfdbc3
 ---> a71a2eac00ce
Step 10/12 : RUN pip install -r /bento/requirements.txt
 ---> Running in 95f4722ada11
Collecting bentoml==0.5.8
  Downloading https://files.pythonhosted.org/packages/a4/ad/707fb1cd011fe772b803b5c106fa4fbb5e12448fa4db2ac42d01db4859cf/BentoML-0.5.8-py3-none-any.whl (537kB)
Collecting fastai
  Downloading https://files.pythonhosted.org/packages/f5/e4/a7025bf28f303dbda0f862c09a7f957476fa92c9271643b4061a81bb595f/fastai-1.0.60-py3-none-any.whl (237kB)
Collecting imageio
  Downloading https://files.pythonhosted.org/packages/1a/de/f7f985018f462ceeffada7f6e609919fbcc934acd9301929cba14bc2c24a/imageio-2.6.1-py3-none-any.whl (3.3MB)
Collecting humanfriendly
  Downloading https://files.pythonhosted.org/packages/90/df/88bff450f333114680698dc4aac7506ff7cab164b794461906de31998665/humanfriendly-4.18-py2.py3-none-any.whl (73kB)
Collecting pandas
  Downloading https://files.pythonhosted.org/packages/63/e0/a1b39cdcb2c391f087a1538bc8a6d62a82d0439693192aef541d7b123769/pandas-0.25.3-cp37-cp37m-manylinux1_x86_64.whl (10.4MB)
Collecting sqlalchemy>=1.3.0
  Downloading https://files.pythonhosted.org/packages/af/47/35edeb0f86c0b44934c05d961c893e223ef27e79e1f53b5e6f14820ff553/SQLAlchemy-1.3.13.tar.gz (6.0MB)
Requirement already satisfied: gunicorn in /opt/conda/lib/python3.7/site-packages (from bentoml==0.5.8->-r /bento/requirements.txt (line 1)) (20.0.4)
Collecting alembic
  Downloading https://files.pythonhosted.org/packages/9d/c9/d4aa3be3511dfd6d86f8f483ce0d9f120258be4aceadc17601843593e2ec/alembic-1.3.3.tar.gz (1.1MB)
Requirement already satisfied: numpy in /opt/conda/lib/python3.7/site-packages (from bentoml==0.5.8->-r /bento/requirements.txt (line 1)) (1.18.1)
Collecting ruamel.yaml>=0.15.0
  Downloading https://files.pythonhosted.org/packages/99/a8/25242fc81d0c02460e93e8cc7ec4ae60c2382c00ba0a0e1becc22e76548d/ruamel.yaml-0.16.6-py2.py3-none-any.whl (123kB)
Collecting python-dateutil<2.8.1,>=2.1
  Downloading https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whl (226kB)
Collecting tabulate
  Downloading https://files.pythonhosted.org/packages/c4/41/523f6a05e6dc3329a5660f6a81254c6cd87e5cfb5b7482bae3391d86ec3a/tabulate-0.8.6.tar.gz (45kB)
Collecting click>=7.0
  Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB)
Collecting flask
  Downloading https://files.pythonhosted.org/packages/9b/93/628509b8d5dc749656a9641f4caf13540e2cdec85276964ff8f43bbb1d3b/Flask-1.1.1-py2.py3-none-any.whl (94kB)
Collecting docker
  Downloading https://files.pythonhosted.org/packages/cc/ca/699d4754a932787ef353a157ada74efd1ceb6d1fc0bfb7989ae1e7b33111/docker-4.1.0-py2.py3-none-any.whl (139kB)
Collecting configparser
  Downloading https://files.pythonhosted.org/packages/7a/2a/95ed0501cf5d8709490b1d3a3f9b5cf340da6c433f896bbe9ce08dbe6785/configparser-4.0.2-py2.py3-none-any.whl
Requirement already satisfied: requests in /opt/conda/lib/python3.7/site-packages (from bentoml==0.5.8->-r /bento/requirements.txt (line 1)) (2.22.0)
Collecting python-json-logger
  Downloading https://files.pythonhosted.org/packages/80/9d/1c3393a6067716e04e6fcef95104c8426d262b4adaf18d7aa2470eab028d/python-json-logger-0.1.11.tar.gz
Collecting grpcio
  Downloading https://files.pythonhosted.org/packages/bc/b3/0052e38c640d52b710e235b15821cc3c61d0065bf54e70a44550ef127349/grpcio-1.26.0-cp37-cp37m-manylinux2010_x86_64.whl (2.4MB)
Collecting packaging
  Downloading https://files.pythonhosted.org/packages/98/42/87c585dd3b113c775e65fd6b8d9d0a43abe1819c471d7af702d4e01e9b20/packaging-20.1-py2.py3-none-any.whl
Collecting prometheus-client
  Downloading https://files.pythonhosted.org/packages/b3/23/41a5a24b502d35a4ad50a5bb7202a5e1d9a0364d0c12f56db3dbf7aca76d/prometheus_client-0.7.1.tar.gz
Collecting cerberus
  Downloading https://files.pythonhosted.org/packages/90/a7/71c6ed2d46a81065e68c007ac63378b96fa54c7bb614d653c68232f9c50c/Cerberus-1.3.2.tar.gz (52kB)
Collecting protobuf>=3.6.0
  Downloading https://files.pythonhosted.org/packages/4a/14/f5c294f1e36a031f165128c25feba93b3116f15a74398d0b2747ed75744f/protobuf-3.11.2-cp37-cp37m-manylinux1_x86_64.whl (1.3MB)
Collecting boto3
  Downloading https://files.pythonhosted.org/packages/d5/57/e9675a5a8d0ee586594ff19cb9a601334fbf24fa2fb29052d2a900ee5d23/boto3-1.11.9-py2.py3-none-any.whl (128kB)
Collecting pyyaml
  Downloading https://files.pythonhosted.org/packages/3d/d9/ea9816aea31beeadccd03f1f8b625ecf8f645bd66744484d162d84803ce5/PyYAML-5.3.tar.gz (268kB)
Collecting torchvision
  Downloading https://files.pythonhosted.org/packages/1c/32/cb0e4c43cd717da50258887b088471568990b5a749784c465a8a1962e021/torchvision-0.5.0-cp37-cp37m-manylinux1_x86_64.whl (4.0MB)
Collecting numexpr
  Downloading https://files.pythonhosted.org/packages/c5/de/3811c7ce8612b4a27bfbf81a779c5970a31a038e32dc6a979e7f2867f56d/numexpr-2.7.1-cp37-cp37m-manylinux1_x86_64.whl (162kB)
Collecting spacy>=2.0.18
  Downloading https://files.pythonhosted.org/packages/91/76/1f30264c433f9c3c84171fa03f4b6bb5f3303df7781d21554d25045873f4/spacy-2.2.3-cp37-cp37m-manylinux1_x86_64.whl (10.4MB)
Requirement already satisfied: scipy in /opt/conda/lib/python3.7/site-packages (from fastai->-r /bento/requirements.txt (line 2)) (1.3.2)
Collecting torch>=1.0.0
  Downloading https://files.pythonhosted.org/packages/1a/3b/fa92ece1e58a6a48ec598bab327f39d69808133e5b2fb33002ca754e381e/torch-1.4.0-cp37-cp37m-manylinux1_x86_64.whl (753.4MB)
Collecting fastprogress>=0.2.1
  Downloading https://files.pythonhosted.org/packages/41/67/347d73405b8612e436a4278f577186a8b783fe757df549ba1a82a2986727/fastprogress-0.2.2-py3-none-any.whl
Collecting bottleneck
  Downloading https://files.pythonhosted.org/packages/62/d0/55bbb49f4fade3497de2399af70ec0a06e432c786b8623c878b11e90d456/Bottleneck-1.3.1.tar.gz (88kB)
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
    Preparing wheel metadata: started
    Preparing wheel metadata: finished with status 'done'
Collecting Pillow
  Downloading https://files.pythonhosted.org/packages/f5/79/b2d5695d1a931474fa68b68ec93bdf08ba9acbc4d6b3b628eb6aac81d11c/Pillow-7.0.0-cp37-cp37m-manylinux1_x86_64.whl (2.1MB)
Collecting nvidia-ml-py3
  Downloading https://files.pythonhosted.org/packages/6d/64/cce82bddb80c0b0f5c703bbdafa94bfb69a1c5ad7a79cff00b482468f0d3/nvidia-ml-py3-7.352.0.tar.gz
Collecting beautifulsoup4
  Downloading https://files.pythonhosted.org/packages/cb/a1/c698cf319e9cfed6b17376281bd0efc6bfc8465698f54170ef60a485ab5d/beautifulsoup4-4.8.2-py3-none-any.whl (106kB)
Collecting matplotlib
  Downloading https://files.pythonhosted.org/packages/61/42/3e92d7aa64295483fbca20a86c89b34d0cb43cffaadaffe028793902d790/matplotlib-3.1.2-cp37-cp37m-manylinux1_x86_64.whl (13.1MB)
Collecting pytz>=2017.2
  Downloading https://files.pythonhosted.org/packages/e7/f9/f0b53f88060247251bf481fa6ea62cd0d25bf1b11a87888e53ce5b7c8ad2/pytz-2019.3-py2.py3-none-any.whl (509kB)
Requirement already satisfied: setuptools>=3.0 in /opt/conda/lib/python3.7/site-packages (from gunicorn->bentoml==0.5.8->-r /bento/requirements.txt (line 1)) (41.4.0)
Collecting Mako
  Downloading https://files.pythonhosted.org/packages/28/03/329b21f00243fc2d3815399413845dbbfb0745cff38a29d3597e97f8be58/Mako-1.1.1.tar.gz (468kB)
Collecting python-editor>=0.3
  Downloading https://files.pythonhosted.org/packages/c6/d3/201fc3abe391bbae6606e6f1d598c15d367033332bd54352b12f35513717/python_editor-1.0.4-py3-none-any.whl
Collecting ruamel.yaml.clib>=0.1.2; platform_python_implementation == "CPython" and python_version < "3.8"
  Downloading https://files.pythonhosted.org/packages/40/80/da16b691d5e259dd9919a10628e541fca321cb4b078fbb88e1c7c22aa42d/ruamel.yaml.clib-0.2.0-cp37-cp37m-manylinux1_x86_64.whl (547kB)
Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.7/site-packages (from python-dateutil<2.8.1,>=2.1->bentoml==0.5.8->-r /bento/requirements.txt (line 1)) (1.12.0)
Collecting itsdangerous>=0.24
  Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Collecting Jinja2>=2.10.1
  Downloading https://files.pythonhosted.org/packages/65/e0/eb35e762802015cab1ccee04e8a277b03f1d8e53da3ec3106882ec42558b/Jinja2-2.10.3-py2.py3-none-any.whl (125kB)
Collecting Werkzeug>=0.15
  Downloading https://files.pythonhosted.org/packages/ce/42/3aeda98f96e85fd26180534d36570e4d18108d62ae36f87694b476b83d6f/Werkzeug-0.16.0-py2.py3-none-any.whl (327kB)
Collecting websocket-client>=0.32.0
  Downloading https://files.pythonhosted.org/packages/4c/5f/f61b420143ed1c8dc69f9eaec5ff1ac36109d52c80de49d66e0c36c3dfdf/websocket_client-0.57.0-py2.py3-none-any.whl (200kB)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /opt/conda/lib/python3.7/site-packages (from requests->bentoml==0.5.8->-r /bento/requirements.txt (line 1)) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /opt/conda/lib/python3.7/site-packages (from requests->bentoml==0.5.8->-r /bento/requirements.txt (line 1)) (1.24.2)
Requirement already satisfied: idna<2.9,>=2.5 in /opt/conda/lib/python3.7/site-packages (from requests->bentoml==0.5.8->-r /bento/requirements.txt (line 1)) (2.8)
Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.7/site-packages (from requests->bentoml==0.5.8->-r /bento/requirements.txt (line 1)) (2019.11.28)
Collecting pyparsing>=2.0.2
  Downloading https://files.pythonhosted.org/packages/5d/bc/1e58593167fade7b544bfe9502a26dc860940a79ab306e651e7f13be68c2/pyparsing-2.4.6-py2.py3-none-any.whl (67kB)
Collecting jmespath<1.0.0,>=0.7.1
  Downloading https://files.pythonhosted.org/packages/83/94/7179c3832a6d45b266ddb2aac329e101367fbdb11f425f13771d27f225bb/jmespath-0.9.4-py2.py3-none-any.whl
Collecting botocore<1.15.0,>=1.14.9
  Downloading https://files.pythonhosted.org/packages/64/4c/b0b0d3b6f84a05f9135051b56d3eb8708012a289c4b82ee21c8c766f47b5/botocore-1.14.9-py2.py3-none-any.whl (5.9MB)
Collecting s3transfer<0.4.0,>=0.3.0
  Downloading https://files.pythonhosted.org/packages/c7/48/a8252b6b3cd31774eab312b19d58a6ac55f296240c206617dcd38cd93bf8/s3transfer-0.3.2-py2.py3-none-any.whl (69kB)
Collecting murmurhash<1.1.0,>=0.28.0
  Downloading https://files.pythonhosted.org/packages/73/fc/10eeacb926ec1e88cd62f79d9ac106b0a3e3fe5ff1690422d88c29bd0909/murmurhash-1.0.2-cp37-cp37m-manylinux1_x86_64.whl
Collecting cymem<2.1.0,>=2.0.2
  Downloading https://files.pythonhosted.org/packages/e1/79/6ce05ecf4d50344e29749ea7db7ddf427589228fb8fe89b29718c38c27c5/cymem-2.0.3-cp37-cp37m-manylinux1_x86_64.whl
Collecting srsly<1.1.0,>=0.1.0
  Downloading https://files.pythonhosted.org/packages/0e/af/f0f2e6cff739421a7e6165d6b1d044eb2d9ef82865895d2528d2c4c6f9c5/srsly-1.0.1-cp37-cp37m-manylinux1_x86_64.whl (185kB)
Collecting catalogue<1.1.0,>=0.0.7
  Downloading https://files.pythonhosted.org/packages/6c/f9/9a5658e2f56932e41eb264941f9a2cb7f3ce41a80cb36b2af6ab78e2f8af/catalogue-1.0.0-py2.py3-none-any.whl
Collecting thinc<7.4.0,>=7.3.0
  Downloading https://files.pythonhosted.org/packages/32/53/d11d2faa6921e55c37ad2cd56b0866a9e6df647fb547cfb69a50059d759c/thinc-7.3.1-cp37-cp37m-manylinux1_x86_64.whl (2.2MB)
Collecting wasabi<1.1.0,>=0.4.0
  Downloading https://files.pythonhosted.org/packages/21/e1/e4e7b754e6be3a79c400eb766fb34924a6d278c43bb828f94233e0124a21/wasabi-0.6.0-py3-none-any.whl
Collecting preshed<3.1.0,>=3.0.2
  Downloading https://files.pythonhosted.org/packages/6c/5b/ae4da6230eb48df353b199f53532c8407d0e9eb6ed678d3d36fa75ac391c/preshed-3.0.2-cp37-cp37m-manylinux1_x86_64.whl (118kB)
Collecting blis<0.5.0,>=0.4.0
  Downloading https://files.pythonhosted.org/packages/0a/8c/f1b2aad385de78db151a6e9728026f311dee8bd480f2edc28a0175a543b6/blis-0.4.1-cp37-cp37m-manylinux1_x86_64.whl (3.7MB)
Collecting plac<1.2.0,>=0.9.6
  Downloading https://files.pythonhosted.org/packages/86/85/40b8f66c2dd8f4fd9f09d59b22720cffecf1331e788b8a0cab5bafb353d1/plac-1.1.3-py2.py3-none-any.whl
Collecting soupsieve>=1.2
  Downloading https://files.pythonhosted.org/packages/81/94/03c0f04471fc245d08d0a99f7946ac228ca98da4fa75796c507f61e688c2/soupsieve-1.9.5-py2.py3-none-any.whl
Collecting kiwisolver>=1.0.1
  Downloading https://files.pythonhosted.org/packages/93/f8/518fb0bb89860eea6ff1b96483fbd9236d5ee991485d0f3eceff1770f654/kiwisolver-1.1.0-cp37-cp37m-manylinux1_x86_64.whl (90kB)
Collecting cycler>=0.10
  Downloading https://files.pythonhosted.org/packages/f7/d2/e07d3ebb2bd7af696440ce7e754c59dd546ffe1bbe732c8ab68b9c834e61/cycler-0.10.0-py2.py3-none-any.whl
Collecting MarkupSafe>=0.9.2
  Downloading https://files.pythonhosted.org/packages/98/7b/ff284bd8c80654e471b769062a9b43cc5d03e7a615048d96f4619df8d420/MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl
Collecting docutils<0.16,>=0.10
  Downloading https://files.pythonhosted.org/packages/22/cd/a6aa959dca619918ccb55023b4cb151949c64d4d5d55b3f4ffd7eee0c6e8/docutils-0.15.2-py3-none-any.whl (547kB)
Collecting importlib-metadata>=0.20; python_version < "3.8"
  Downloading https://files.pythonhosted.org/packages/d7/31/74dcb59a601b95fce3b0334e8fc9db758f78e43075f22aeb3677dfb19f4c/importlib_metadata-1.4.0-py2.py3-none-any.whl
Requirement already satisfied: tqdm<5.0.0,>=4.10.0 in /opt/conda/lib/python3.7/site-packages (from thinc<7.4.0,>=7.3.0->spacy>=2.0.18->fastai->-r /bento/requirements.txt (line 2)) (4.36.1)
Collecting zipp>=0.5
  Downloading https://files.pythonhosted.org/packages/e1/0f/c25ab0632254f276599b664c3b9973f537a04910130321e0fb936806ff40/zipp-2.0.1-py3-none-any.whl
Collecting more-itertools
  Downloading https://files.pythonhosted.org/packages/bc/e2/3206a70758a21f9878fcf9478282bb68fbc66a5564718f9ed724c3f2bb52/more_itertools-8.1.0-py3-none-any.whl (41kB)
Building wheels for collected packages: bottleneck
  Building wheel for bottleneck (PEP 517): started
  Building wheel for bottleneck (PEP 517): finished with status 'done'
  Created wheel for bottleneck: filename=Bottleneck-1.3.1-cp37-cp37m-linux_x86_64.whl size=386299 sha256=ee3455e02b2b591f4e7f4c6b7ee78f22feb6745c550ab5e48815df6d2f8f5fe0
  Stored in directory: /root/.cache/pip/wheels/31/36/8f/1ed7e6f1b3295499c8bbab934262f2494d0f6aebe0c5860754
Successfully built bottleneck
Building wheels for collected packages: sqlalchemy, alembic, tabulate, python-json-logger, prometheus-client, cerberus, pyyaml, nvidia-ml-py3, Mako
  Building wheel for sqlalchemy (setup.py): started
  Building wheel for sqlalchemy (setup.py): finished with status 'done'
  Created wheel for sqlalchemy: filename=SQLAlchemy-1.3.13-cp37-cp37m-linux_x86_64.whl size=1223694 sha256=b592d8af8586ac06350508f051097cfddfa29a5c96a0fde0c75e926e390ae41d
  Stored in directory: /root/.cache/pip/wheels/b3/35/98/4c9cb3fd63d21d5606b972dd70643769745adf60e622467b71
  Building wheel for alembic (setup.py): started
  Building wheel for alembic (setup.py): finished with status 'done'
  Created wheel for alembic: filename=alembic-1.3.3-py2.py3-none-any.whl size=155684 sha256=c7e3bf652225c97d5064bda5cb586109dcd8911fef517129619bc34f4601df40
  Stored in directory: /root/.cache/pip/wheels/12/6a/49/94a4af65af2edbccf9f467c0f4b26f24d0e5b61be0d8a7e066
  Building wheel for tabulate (setup.py): started
  Building wheel for tabulate (setup.py): finished with status 'done'
  Created wheel for tabulate: filename=tabulate-0.8.6-cp37-none-any.whl size=23274 sha256=6fad1b1cbdd20f8e0d00d06194e6cebbab964815e0d3babc1297a4445bc81c9a
  Stored in directory: /root/.cache/pip/wheels/9c/9b/f4/eb243fdb89676ec00588e8c54bb54360724c06e7fafe95278e
  Building wheel for python-json-logger (setup.py): started
  Building wheel for python-json-logger (setup.py): finished with status 'done'
  Created wheel for python-json-logger: filename=python_json_logger-0.1.11-py2.py3-none-any.whl size=5076 sha256=80d4fabdd0d2db741c434790d8e5f34ac0be496005fb3581dcb39cd3cfe06f3a
  Stored in directory: /root/.cache/pip/wheels/97/f7/a1/752e22bb30c1cfe38194ea0070a5c66e76ef4d06ad0c7dc401
  Building wheel for prometheus-client (setup.py): started
  Building wheel for prometheus-client (setup.py): finished with status 'done'
  Created wheel for prometheus-client: filename=prometheus_client-0.7.1-cp37-none-any.whl size=41402 sha256=d4bf29aaa25978a6f950fd013a928cc8883e8acb2a986427774e7d60141d57bd
  Stored in directory: /root/.cache/pip/wheels/1c/54/34/fd47cd9b308826cc4292b54449c1899a30251ef3b506bc91ea
  Building wheel for cerberus (setup.py): started
  Building wheel for cerberus (setup.py): finished with status 'done'
  Created wheel for cerberus: filename=Cerberus-1.3.2-cp37-none-any.whl size=54336 sha256=be618eaccb8047ea92eadb064588e065b2676613b1fb8ae4a50d3d2b65e5ed22
  Stored in directory: /root/.cache/pip/wheels/e9/38/1f/f2cc84182676f3ae7134b9b2d744f9c235b24d2ddc8f7fe465
  Building wheel for pyyaml (setup.py): started
  Building wheel for pyyaml (setup.py): finished with status 'done'
  Created wheel for pyyaml: filename=PyYAML-5.3-cp37-cp37m-linux_x86_64.whl size=44228 sha256=0a4efcf7b99175218e94aac53fb060c445b17e8c2896bb119044cc4771323f41
  Stored in directory: /root/.cache/pip/wheels/e4/76/4d/a95b8dd7b452b69e8ed4f68b69e1b55e12c9c9624dd962b191
  Building wheel for nvidia-ml-py3 (setup.py): started
  Building wheel for nvidia-ml-py3 (setup.py): finished with status 'done'
  Created wheel for nvidia-ml-py3: filename=nvidia_ml_py3-7.352.0-cp37-none-any.whl size=19192 sha256=d6982c34bcc1d9fe9c9a1bd765ecb15bd119015e8b26e6bfe5ac3876a4fc2ecb
  Stored in directory: /root/.cache/pip/wheels/e4/1d/06/640c93f5270d67d0247f30be91f232700d19023f9e66d735c7
  Building wheel for Mako (setup.py): started
  Building wheel for Mako (setup.py): finished with status 'done'
  Created wheel for Mako: filename=Mako-1.1.1-cp37-none-any.whl size=75411 sha256=0c6de32fd24b9c2d3e9f280c91955b8876a4bc229c66f417ff299bfab91ef900
  Stored in directory: /root/.cache/pip/wheels/ff/50/a9/0ddeed8679a1fb65bf4677cb9c92701828b2c1821e22ef72fd
Successfully built sqlalchemy alembic tabulate python-json-logger prometheus-client cerberus pyyaml nvidia-ml-py3 Mako
Installing collected packages: humanfriendly, python-dateutil, pytz, pandas, sqlalchemy, MarkupSafe, Mako, python-editor, alembic, ruamel.yaml.clib, ruamel.yaml, tabulate, click, itsdangerous, Jinja2, Werkzeug, flask, websocket-client, docker, configparser, python-json-logger, grpcio, pyparsing, packaging, prometheus-client, cerberus, protobuf, jmespath, docutils, botocore, s3transfer, boto3, bentoml, pyyaml, torch, Pillow, torchvision, numexpr, murmurhash, cymem, srsly, more-itertools, zipp, importlib-metadata, catalogue, preshed, plac, blis, wasabi, thinc, spacy, fastprogress, bottleneck, nvidia-ml-py3, soupsieve, beautifulsoup4, kiwisolver, cycler, matplotlib, fastai, imageio

Next, you can docker push the image to your choice of registry for deployment, or run it locally for development and testing:

In [ ]:
!docker run -p 5000:5000 pet-classification

Deploy BentoService as REST API server to the cloud

BentoML support deployment to multiply cloud provider services, such as AWS Lambda, AWS Sagemaker, Google Cloudrun and etc. You can find the full list and guide on the documentation site at https://docs.bentoml.org/en/latest/deployment/index.html

For this project, we are going to deploy to AWS Sagemaker

In [38]:
!bentoml sagemaker deploy my-fastai-pet-classifier \
    -b {service.name}:{service.version} --api-name predict \
    --region us-west-2 --verbose
[2020-01-22 16:06:56,286] DEBUG - Using BentoML with local Yatai server
[2020-01-22 16:06:56,441] DEBUG - Upgrading tables to the latest revision
Deploying Sagemaker deployment |[2020-01-22 16:06:57,535] DEBUG - Created temporary directory: /private/var/folders/kn/xnc9k74x03567n1mx2tfqnpr0000gn/T/bentoml-temp-nwtfxp0g
-[2020-01-22 16:06:58,136] DEBUG - Getting docker login info from AWS
[2020-01-22 16:06:58,137] DEBUG - Building docker image: 192023623294.dkr.ecr.us-west-2.amazonaws.com/petclassification-sagemaker:20200122122128_513734
-[2020-01-22 16:07:01,364] INFO - Step 1/11 : FROM continuumio/miniconda3:4.7.12
[2020-01-22 16:07:01,364] INFO - 

[2020-01-22 16:07:01,365] INFO -  ---> 406f2b43ea59

[2020-01-22 16:07:01,365] INFO - Step 2/11 : EXPOSE 8080
[2020-01-22 16:07:01,365] INFO - 

[2020-01-22 16:07:01,365] INFO -  ---> Using cache

[2020-01-22 16:07:01,365] INFO -  ---> d8ec94af8603

[2020-01-22 16:07:01,365] INFO - Step 3/11 : RUN set -x      && apt-get update      && apt-get install --no-install-recommends --no-install-suggests -y libpq-dev build-essential     && apt-get install -y nginx      && rm -rf /var/lib/apt/lists/*
[2020-01-22 16:07:01,365] INFO - 

[2020-01-22 16:07:01,365] INFO -  ---> Using cache

[2020-01-22 16:07:01,366] INFO -  ---> 2d40d6bd126a

[2020-01-22 16:07:01,366] INFO - Step 4/11 : RUN conda install pip numpy scipy       && pip install gunicorn gevent
[2020-01-22 16:07:01,366] INFO - 

[2020-01-22 16:07:01,366] INFO -  ---> Using cache

[2020-01-22 16:07:01,366] INFO -  ---> 62c846ad06a6

[2020-01-22 16:07:01,367] INFO - Step 5/11 : COPY . /opt/program
[2020-01-22 16:07:01,367] INFO - 

[2020-01-22 16:07:01,367] INFO -  ---> Using cache

[2020-01-22 16:07:01,367] INFO -  ---> e3d4fd20fb50

[2020-01-22 16:07:01,367] INFO - Step 6/11 : WORKDIR /opt/program
[2020-01-22 16:07:01,367] INFO - 

[2020-01-22 16:07:01,367] INFO -  ---> Using cache

[2020-01-22 16:07:01,367] INFO -  ---> e4fc833f7480

[2020-01-22 16:07:01,367] INFO - Step 7/11 : RUN conda env update -n base -f /opt/program/environment.yml
[2020-01-22 16:07:01,368] INFO - 

[2020-01-22 16:07:01,368] INFO -  ---> Using cache

[2020-01-22 16:07:01,368] INFO -  ---> f7243d66917a

[2020-01-22 16:07:01,368] INFO - Step 8/11 : RUN pip install -r /opt/program/requirements.txt
[2020-01-22 16:07:01,368] INFO - 

[2020-01-22 16:07:01,368] INFO -  ---> Using cache

[2020-01-22 16:07:01,368] INFO -  ---> 88f47f6d755a

[2020-01-22 16:07:01,368] INFO - Step 9/11 : RUN if [ -f /bento/bentoml_init.sh ]; then /bin/bash -c /bento/bentoml_init.sh; fi
[2020-01-22 16:07:01,368] INFO - 

[2020-01-22 16:07:01,368] INFO -  ---> Using cache

[2020-01-22 16:07:01,369] INFO -  ---> 817409d57495

[2020-01-22 16:07:01,369] INFO - Step 10/11 : RUN if [ -f /opt/program/setup.sh ]; then /bin/bash -c /opt/program/setup.sh; fi
[2020-01-22 16:07:01,369] INFO - 

[2020-01-22 16:07:01,369] INFO -  ---> Using cache

[2020-01-22 16:07:01,369] INFO -  ---> 69ce04dbf4db

[2020-01-22 16:07:01,369] INFO - Step 11/11 : ENV PATH="/opt/program:${PATH}"
[2020-01-22 16:07:01,370] INFO - 

/[2020-01-22 16:07:01,519] INFO -  ---> Running in 5b53fd86af81

\[2020-01-22 16:07:01,724] INFO -  ---> 09277e983440

-[2020-01-22 16:07:01,753] INFO - Successfully built 09277e983440

[2020-01-22 16:07:01,758] INFO - Successfully tagged 192023623294.dkr.ecr.us-west-2.amazonaws.com/petclassification-sagemaker:20200122122128_513734

[2020-01-22 16:07:01,812] DEBUG - Pushing image to AWS ECR at 192023623294.dkr.ecr.us-west-2.amazonaws.com/petclassification-sagemaker:20200122122128_513734
-[2020-01-22 16:15:59,324] DEBUG - Finished pushing image: 192023623294.dkr.ecr.us-west-2.amazonaws.com/petclassification-sagemaker:20200122122128_513734
[2020-01-22 16:15:59,329] DEBUG - BentoML in debug mode, keeping temp directory "/private/var/folders/kn/xnc9k74x03567n1mx2tfqnpr0000gn/T/bentoml-temp-nwtfxp0g"
|[2020-01-22 16:16:00,812] DEBUG - AWS create model response: {'ModelArn': 'arn:aws:sagemaker:us-west-2:192023623294:model/dev-my-fastai-pe-petclassification-20200122122128-513734', 'ResponseMetadata': {'RequestId': '8a250c08-5f9c-4b59-8016-a3ddb781bb04', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '8a250c08-5f9c-4b59-8016-a3ddb781bb04', 'content-type': 'application/x-amz-json-1.1', 'content-length': '118', 'date': 'Thu, 23 Jan 2020 00:15:59 GMT'}, 'RetryAttempts': 0}}
[2020-01-22 16:16:00,812] DEBUG - Creating Sagemaker endpoint dev-my-fastai-pe-PetClassification-20200122122128-513734 configuration
\[2020-01-22 16:16:00,895] DEBUG - AWS create endpoint config response: {'EndpointConfigArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint-config/dev-my-fastai-pe-petclassification-20200122122128-513734', 'ResponseMetadata': {'RequestId': '0c62bb4f-5673-4f6c-b35c-70ef1d0ce60e', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '0c62bb4f-5673-4f6c-b35c-70ef1d0ce60e', 'content-type': 'application/x-amz-json-1.1', 'content-length': '137', 'date': 'Thu, 23 Jan 2020 00:15:59 GMT'}, 'RetryAttempts': 0}}
[2020-01-22 16:16:00,895] DEBUG - Creating sagemaker endpoint dev-my-fastai-pet-classifier
/[2020-01-22 16:16:01,132] DEBUG - AWS create endpoint response: {'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'ResponseMetadata': {'RequestId': '0348aebd-136a-4bae-ba85-9576a01ca7a0', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '0348aebd-136a-4bae-ba85-9576a01ca7a0', 'content-type': 'application/x-amz-json-1.1', 'content-length': '96', 'date': 'Thu, 23 Jan 2020 00:16:00 GMT'}, 'RetryAttempts': 0}}
[2020-01-22 16:16:01,139] INFO - ApplyDeployment (my-fastai-pet-classifier, namespace dev) succeeded
\[2020-01-22 16:16:01,371] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '35700c39-e25e-48a1-a505-32c635a9b480', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '35700c39-e25e-48a1-a505-32c635a9b480', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:16:01 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:16:06,660] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'b89fc403-7ac4-499a-9155-0ba88b4abf9f', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'b89fc403-7ac4-499a-9155-0ba88b4abf9f', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:16:05 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:16:11,882] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '4055f23d-d420-462e-a2f7-28b197f75104', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '4055f23d-d420-462e-a2f7-28b197f75104', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:16:11 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:16:17,109] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '8a00064c-b11f-4063-9f63-95a5de81c93e', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '8a00064c-b11f-4063-9f63-95a5de81c93e', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:16:16 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:16:22,361] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '058f7126-7a9a-4791-874e-611705d62dfc', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '058f7126-7a9a-4791-874e-611705d62dfc', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:16:21 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:16:27,599] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '11267c38-83e1-459f-8776-510df6fd2b26', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '11267c38-83e1-459f-8776-510df6fd2b26', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:16:27 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:16:32,842] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '1c1142f2-6de3-4053-9961-2744dcab2a5b', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '1c1142f2-6de3-4053-9961-2744dcab2a5b', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:16:32 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:16:38,068] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '07d5e85c-276e-4e0f-9a4d-b183269670c2', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '07d5e85c-276e-4e0f-9a4d-b183269670c2', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:16:37 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:16:43,303] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'cf64946c-bd3d-4c33-83b3-68fb14fd89ae', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'cf64946c-bd3d-4c33-83b3-68fb14fd89ae', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:16:43 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:16:48,540] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '41fee0c1-d42e-4cc6-afd6-a97c89916db1', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '41fee0c1-d42e-4cc6-afd6-a97c89916db1', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:16:48 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:16:53,774] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'c8702012-7c70-4784-9999-f4c64e6356f2', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'c8702012-7c70-4784-9999-f4c64e6356f2', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:16:53 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:16:58,978] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'f7e9929b-4bf3-41a5-b901-5e9d01343a90', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'f7e9929b-4bf3-41a5-b901-5e9d01343a90', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:16:58 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:17:04,236] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '5e79209d-2037-4a85-83b6-b4af6df1bc10', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '5e79209d-2037-4a85-83b6-b4af6df1bc10', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:17:03 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:17:09,484] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '8edd0400-1913-4600-a9b5-8bb3b3018991', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '8edd0400-1913-4600-a9b5-8bb3b3018991', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:17:09 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:17:14,744] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '697985d5-0a8a-498d-ba39-0f05b8545d53', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '697985d5-0a8a-498d-ba39-0f05b8545d53', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:17:14 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:17:20,030] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'd61dda2b-60bc-4d68-849a-9172671ecf51', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'd61dda2b-60bc-4d68-849a-9172671ecf51', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:17:19 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:17:25,237] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'fd7b040b-be0c-4a19-920b-3e217c8314ad', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'fd7b040b-be0c-4a19-920b-3e217c8314ad', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:17:25 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:17:30,472] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '79c7044b-d9c2-4d04-97c3-827757d8d4b6', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '79c7044b-d9c2-4d04-97c3-827757d8d4b6', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:17:29 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:17:35,678] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'b8877d45-1d49-4515-89b7-20bb05513914', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'b8877d45-1d49-4515-89b7-20bb05513914', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:17:35 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:17:40,896] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'f829555f-719b-49d7-be90-63821bb30f23', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'f829555f-719b-49d7-be90-63821bb30f23', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:17:40 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:17:46,120] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '609fc02a-cb4c-4cde-b5c8-f4cb6c029db5', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '609fc02a-cb4c-4cde-b5c8-f4cb6c029db5', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:17:46 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:17:51,349] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'ecf5b375-44e8-4a58-96a5-d346e7626a37', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'ecf5b375-44e8-4a58-96a5-d346e7626a37', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:17:50 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:17:56,573] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'bc5aba59-a767-4014-9c1b-80a006c280b0', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'bc5aba59-a767-4014-9c1b-80a006c280b0', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:17:55 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:18:01,805] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '51d8c336-959a-4e17-8052-f311fb02e6ab', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '51d8c336-959a-4e17-8052-f311fb02e6ab', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:18:01 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:18:07,047] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '563077a2-d2bf-45d3-8de0-2efdef13735f', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '563077a2-d2bf-45d3-8de0-2efdef13735f', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:18:06 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:18:12,264] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'fead4598-74c4-4d3c-91d4-ca369963727b', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'fead4598-74c4-4d3c-91d4-ca369963727b', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:18:11 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:18:17,488] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '22972085-cdc1-4bd9-aa6b-58f4bd649bee', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '22972085-cdc1-4bd9-aa6b-58f4bd649bee', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:18:17 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:18:23,295] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '14ba1689-954d-4659-863d-dcd8c77b1271', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '14ba1689-954d-4659-863d-dcd8c77b1271', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:18:22 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:18:28,504] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '5ee8c24d-3504-424a-92ca-a357b22bceac', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '5ee8c24d-3504-424a-92ca-a357b22bceac', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:18:27 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:18:33,717] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '1e98027d-d66b-48a2-8375-0dce07d5eb8f', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '1e98027d-d66b-48a2-8375-0dce07d5eb8f', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:18:33 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:18:38,942] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'da1d63c6-2664-4124-9098-44834b106cd9', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'da1d63c6-2664-4124-9098-44834b106cd9', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:18:38 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:18:45,234] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '1a8b335c-56da-4347-95fd-d4553fea4674', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '1a8b335c-56da-4347-95fd-d4553fea4674', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:18:44 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:18:50,469] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'c9419e4d-6c0d-4e06-ae47-987fa4dd236c', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'c9419e4d-6c0d-4e06-ae47-987fa4dd236c', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:18:50 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:18:55,692] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'e88ab707-388d-43c9-bd69-9e2eee5440c5', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'e88ab707-388d-43c9-bd69-9e2eee5440c5', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:18:55 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:19:00,939] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '23d74258-5757-4279-8447-fd68ca7b5d64', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '23d74258-5757-4279-8447-fd68ca7b5d64', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:19:00 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:19:06,167] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '2c7f36cb-4375-40b3-9713-916adc52003f', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '2c7f36cb-4375-40b3-9713-916adc52003f', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:19:05 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:19:11,396] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '80ad0021-a8c4-4fb8-b976-041712298612', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '80ad0021-a8c4-4fb8-b976-041712298612', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:19:11 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:19:16,615] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'b94f097c-f069-4137-8162-594bd8e42cd4', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'b94f097c-f069-4137-8162-594bd8e42cd4', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:19:16 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:19:21,832] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '6f7ea8c8-be52-4c51-af14-bd00157e5f29', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '6f7ea8c8-be52-4c51-af14-bd00157e5f29', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:19:21 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:19:27,049] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'b1628262-17f2-4003-bf2e-d3987624cd41', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'b1628262-17f2-4003-bf2e-d3987624cd41', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:19:26 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:19:32,268] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'd8a97cff-600c-4fbf-bde1-f6df9aa258ca', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'd8a97cff-600c-4fbf-bde1-f6df9aa258ca', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:19:31 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:19:37,500] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '517e8e03-e731-4e77-b9d1-1b439a91437e', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '517e8e03-e731-4e77-b9d1-1b439a91437e', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:19:36 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:19:42,739] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'c52c1444-9e41-4481-a209-949eccff5aab', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'c52c1444-9e41-4481-a209-949eccff5aab', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:19:42 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:19:47,958] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '368e7111-3850-49e7-a814-04a72348c6a9', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '368e7111-3850-49e7-a814-04a72348c6a9', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:19:47 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:19:53,175] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '7c045f6d-b95b-4d17-8ce1-309b3d642f97', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '7c045f6d-b95b-4d17-8ce1-309b3d642f97', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:19:52 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:19:58,401] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'd7f2e928-1cbc-4c66-b705-bbaccbbe78af', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'd7f2e928-1cbc-4c66-b705-bbaccbbe78af', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:19:57 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:20:03,638] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '0c48ab5b-b028-459c-bd62-c543afc74d52', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '0c48ab5b-b028-459c-bd62-c543afc74d52', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:20:03 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:20:08,862] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '8f41e355-4c2d-4557-8bfd-14318689e003', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '8f41e355-4c2d-4557-8bfd-14318689e003', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:20:07 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:20:14,079] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '00894ac4-2ae0-468d-a4a7-0b86cfbd909a', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '00894ac4-2ae0-468d-a4a7-0b86cfbd909a', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:20:13 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:20:19,297] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '182e92ce-e078-4724-af6e-017f82e697f0', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '182e92ce-e078-4724-af6e-017f82e697f0', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:20:18 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:20:24,506] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '59374a90-744b-4473-8eda-ee5be300bdf5', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '59374a90-744b-4473-8eda-ee5be300bdf5', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:20:24 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:20:29,763] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'd0321642-e4e6-4b91-8ec1-b9c3f6ed24cb', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'd0321642-e4e6-4b91-8ec1-b9c3f6ed24cb', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:20:29 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:20:34,996] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '0bb6bdfc-28ee-4d0a-900b-eeb496516b4a', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '0bb6bdfc-28ee-4d0a-900b-eeb496516b4a', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:20:34 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:20:40,214] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'c69ee879-9239-4961-9e92-ac8073cabd0b', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'c69ee879-9239-4961-9e92-ac8073cabd0b', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:20:39 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:20:45,431] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '93949dfe-59d2-4158-99a2-0b9065dda7d6', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '93949dfe-59d2-4158-99a2-0b9065dda7d6', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:20:44 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:20:50,643] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'ea104183-2e61-4d13-9068-7d6d4e5da548', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'ea104183-2e61-4d13-9068-7d6d4e5da548', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:20:50 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:20:55,875] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'a8a924b3-2b8e-43b3-ad0e-dc5fd278a1a5', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'a8a924b3-2b8e-43b3-ad0e-dc5fd278a1a5', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:20:55 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:21:01,096] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '855d49b1-a810-4fd8-9ebb-342a2bdc75c0', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '855d49b1-a810-4fd8-9ebb-342a2bdc75c0', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:21:00 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:21:06,379] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '66c72164-48b0-4dde-80df-e1848ede9b74', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '66c72164-48b0-4dde-80df-e1848ede9b74', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:21:06 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:21:11,594] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'dbc78ca6-e057-415b-87c8-978638d154bd', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'dbc78ca6-e057-415b-87c8-978638d154bd', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:21:11 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:21:16,815] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '3b449106-00d7-4dcf-afe2-926e1d420d57', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '3b449106-00d7-4dcf-afe2-926e1d420d57', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:21:16 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:21:22,033] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '451269a2-8af4-476e-8da2-f6d587673697', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '451269a2-8af4-476e-8da2-f6d587673697', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:21:21 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:21:27,265] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '43a3daa5-fb7a-4c79-aa65-2f3b8d4f2841', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '43a3daa5-fb7a-4c79-aa65-2f3b8d4f2841', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:21:26 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:21:32,478] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '6198c5a9-850a-499f-b789-b74cfeb7b15b', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '6198c5a9-850a-499f-b789-b74cfeb7b15b', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:21:32 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:21:37,698] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '21d2cc69-dc2a-4ca0-b5c6-e4f868aa35ca', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '21d2cc69-dc2a-4ca0-b5c6-e4f868aa35ca', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:21:36 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:21:42,916] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '0afbf555-21a5-4834-9a89-84f9f8172ecf', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '0afbf555-21a5-4834-9a89-84f9f8172ecf', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:21:42 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:21:48,136] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'c8bb9ecf-db3e-4852-ad14-87b4c2ce7284', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'c8bb9ecf-db3e-4852-ad14-87b4c2ce7284', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:21:48 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:21:53,461] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '56791176-9e88-4555-aefe-ca3ef65aadff', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '56791176-9e88-4555-aefe-ca3ef65aadff', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:21:53 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:21:58,688] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '8c960953-bd37-4d4f-b08a-2023614cd441', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '8c960953-bd37-4d4f-b08a-2023614cd441', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:21:57 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:22:03,910] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '107661fb-5c25-472e-a205-e4e1bae5b512', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '107661fb-5c25-472e-a205-e4e1bae5b512', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:22:03 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:22:09,126] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '6a6d0d37-ba03-4b98-a707-1de4a378c0eb', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '6a6d0d37-ba03-4b98-a707-1de4a378c0eb', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:22:08 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:22:14,348] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '0a306c6a-f851-4ca3-94c0-a4e764f2ddb8', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '0a306c6a-f851-4ca3-94c0-a4e764f2ddb8', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:22:14 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:22:19,564] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '3869b352-8db7-411f-abe0-928a39af1dbf', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '3869b352-8db7-411f-abe0-928a39af1dbf', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:22:18 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:22:24,790] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '654ad21e-0569-4848-a467-84e8593a18e6', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '654ad21e-0569-4848-a467-84e8593a18e6', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:22:24 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:22:30,006] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'f394fccf-3361-489d-8a8c-370c6f217103', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'f394fccf-3361-489d-8a8c-370c6f217103', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:22:29 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:22:35,225] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '3a565413-cadc-41cd-ad90-9fd2e54c8756', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '3a565413-cadc-41cd-ad90-9fd2e54c8756', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:22:34 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:22:40,444] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'de8aca70-a8a6-447d-9355-52bde43c5349', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'de8aca70-a8a6-447d-9355-52bde43c5349', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:22:40 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:22:45,673] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '408ee4d0-7952-4e39-8d3c-8a3547ddf8d9', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '408ee4d0-7952-4e39-8d3c-8a3547ddf8d9', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:22:45 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:22:50,883] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '0f19d515-7933-4a7b-9549-6b7ab1afe541', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '0f19d515-7933-4a7b-9549-6b7ab1afe541', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:22:50 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:22:56,088] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '7e8ddec8-9ed2-48f8-abef-daf705650944', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '7e8ddec8-9ed2-48f8-abef-daf705650944', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:22:55 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:23:01,317] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'c0252f54-d94c-4a0b-b0ae-14929b9c3ef0', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'c0252f54-d94c-4a0b-b0ae-14929b9c3ef0', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:23:00 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:23:06,536] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'f92b6ee6-9c39-438f-a119-b0478d6907f7', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'f92b6ee6-9c39-438f-a119-b0478d6907f7', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:23:06 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:23:11,758] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '76c6882b-986b-4b1b-8422-ebd4901c7644', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '76c6882b-986b-4b1b-8422-ebd4901c7644', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:23:10 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:23:16,979] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'cc550269-c0b7-49be-b700-cfa96c5bc694', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'cc550269-c0b7-49be-b700-cfa96c5bc694', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:23:16 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:23:22,761] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '595d9786-fa7d-4467-a31a-bd090dfce3f9', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '595d9786-fa7d-4467-a31a-bd090dfce3f9', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:23:21 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:23:27,978] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '03b29be8-b235-4b6f-a7a3-d548268c9740', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '03b29be8-b235-4b6f-a7a3-d548268c9740', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:23:27 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:23:33,212] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '237b372f-129e-4a49-987b-ec08e46a3ed6', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '237b372f-129e-4a49-987b-ec08e46a3ed6', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:23:32 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:23:38,498] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '3f6a28ee-4f1b-4e46-bcfd-65af505d4a4c', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '3f6a28ee-4f1b-4e46-bcfd-65af505d4a4c', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:23:38 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:23:43,719] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'aa56dc68-732d-4fc1-9f16-b8098e0c5e3a', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'aa56dc68-732d-4fc1-9f16-b8098e0c5e3a', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:23:43 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:23:48,923] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '5fd99247-91fb-413f-9505-4b6702f15774', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '5fd99247-91fb-413f-9505-4b6702f15774', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:23:48 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:23:54,148] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '86d6b1df-c656-4fa8-ba11-f678b22102ed', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '86d6b1df-c656-4fa8-ba11-f678b22102ed', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:23:53 GMT'}, 'RetryAttempts': 0}}
-[2020-01-22 16:23:59,356] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'f75be5c1-6cf5-4fda-b12e-7d7e6aa48c95', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'f75be5c1-6cf5-4fda-b12e-7d7e6aa48c95', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:23:58 GMT'}, 'RetryAttempts': 0}}
\[2020-01-22 16:24:04,588] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': 'fd79a77a-49b7-4103-9323-547cde818750', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'fd79a77a-49b7-4103-9323-547cde818750', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:24:03 GMT'}, 'RetryAttempts': 0}}
|[2020-01-22 16:24:09,804] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'EndpointStatus': 'Creating', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '1ab6564a-b465-45dc-82ce-18e71c549eb7', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '1ab6564a-b465-45dc-82ce-18e71c549eb7', 'content-type': 'application/x-amz-json-1.1', 'content-length': '318', 'date': 'Thu, 23 Jan 2020 00:24:09 GMT'}, 'RetryAttempts': 0}}
/[2020-01-22 16:24:15,043] DEBUG - AWS describe endpoint response: {'EndpointName': 'dev-my-fastai-pet-classifier', 'EndpointArn': 'arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier', 'EndpointConfigName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'ProductionVariants': [{'VariantName': 'dev-my-fastai-pe-PetClassification-20200122122128-513734', 'DeployedImages': [{'SpecifiedImage': '192023623294.dkr.ecr.us-west-2.amazonaws.com/petclassification-sagemaker:20200122122128_513734', 'ResolvedImage': '192023623294.dkr.ecr.us-west-2.amazonaws.com/petclassification-sagemaker@sha256:a7016dc5fb7cc6949c9890cc06687d227e0e7316ceb44b05e4cc200a47ba8194', 'ResolutionTime': datetime.datetime(2020, 1, 22, 16, 16, 3, 782000, tzinfo=tzlocal())}], 'CurrentWeight': 1.0, 'DesiredWeight': 1.0, 'CurrentInstanceCount': 1, 'DesiredInstanceCount': 1}], 'EndpointStatus': 'InService', 'CreationTime': datetime.datetime(2020, 1, 22, 16, 16, 1, 96000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2020, 1, 22, 16, 24, 12, 725000, tzinfo=tzlocal()), 'ResponseMetadata': {'RequestId': '7142fa68-1798-4d9d-9770-7cb37217a69c', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '7142fa68-1798-4d9d-9770-7cb37217a69c', 'content-type': 'application/x-amz-json-1.1', 'content-length': '839', 'date': 'Thu, 23 Jan 2020 00:24:14 GMT'}, 'RetryAttempts': 0}}
Successfully created AWS Sagemaker deployment my-fastai-pet-classifier
{
  "namespace": "dev",
  "name": "my-fastai-pet-classifier",
  "spec": {
    "bentoName": "PetClassification",
    "bentoVersion": "20200122122128_513734",
    "operator": "AWS_SAGEMAKER",
    "sagemakerOperatorConfig": {
      "region": "us-west-2",
      "instanceType": "ml.m4.xlarge",
      "instanceCount": 1,
      "apiName": "predict"
    }
  },
  "state": {
    "state": "RUNNING",
    "infoJson": {
      "EndpointName": "dev-my-fastai-pet-classifier",
      "EndpointArn": "arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier",
      "EndpointConfigName": "dev-my-fastai-pe-PetClassification-20200122122128-513734",
      "ProductionVariants": [
        {
          "VariantName": "dev-my-fastai-pe-PetClassification-20200122122128-513734",
          "DeployedImages": [
            {
              "SpecifiedImage": "192023623294.dkr.ecr.us-west-2.amazonaws.com/petclassification-sagemaker:20200122122128_513734",
              "ResolvedImage": "192023623294.dkr.ecr.us-west-2.amazonaws.com/petclassification-sagemaker@sha256:a7016dc5fb7cc6949c9890cc06687d227e0e7316ceb44b05e4cc200a47ba8194",
              "ResolutionTime": "2020-01-22 16:16:03.782000-08:00"
            }
          ],
          "CurrentWeight": 1.0,
          "DesiredWeight": 1.0,
          "CurrentInstanceCount": 1,
          "DesiredInstanceCount": 1
        }
      ],
      "EndpointStatus": "InService",
      "CreationTime": "2020-01-22 16:16:01.096000-08:00",
      "LastModifiedTime": "2020-01-22 16:24:12.725000-08:00",
      "ResponseMetadata": {
        "RequestId": "7142fa68-1798-4d9d-9770-7cb37217a69c",
        "HTTPStatusCode": 200,
        "HTTPHeaders": {
          "x-amzn-requestid": "7142fa68-1798-4d9d-9770-7cb37217a69c",
          "content-type": "application/x-amz-json-1.1",
          "content-length": "839",
          "date": "Thu, 23 Jan 2020 00:24:14 GMT"
        },
        "RetryAttempts": 0
      }
    },
    "timestamp": "2020-01-23T00:24:15.043880Z"
  },
  "createdAt": "2020-01-23T00:06:56.469823Z",
  "lastUpdatedAt": "2020-01-23T00:06:56.469868Z"
}
In [39]:
!bentoml sagemaker get my-fastai-pet-classifier
{
  "namespace": "dev",
  "name": "my-fastai-pet-classifier",
  "spec": {
    "bentoName": "PetClassification",
    "bentoVersion": "20200122122128_513734",
    "operator": "AWS_SAGEMAKER",
    "sagemakerOperatorConfig": {
      "region": "us-west-2",
      "instanceType": "ml.m4.xlarge",
      "instanceCount": 1,
      "apiName": "predict"
    }
  },
  "state": {
    "state": "RUNNING",
    "infoJson": {
      "EndpointName": "dev-my-fastai-pet-classifier",
      "EndpointArn": "arn:aws:sagemaker:us-west-2:192023623294:endpoint/dev-my-fastai-pet-classifier",
      "EndpointConfigName": "dev-my-fastai-pe-PetClassification-20200122122128-513734",
      "ProductionVariants": [
        {
          "VariantName": "dev-my-fastai-pe-PetClassification-20200122122128-513734",
          "DeployedImages": [
            {
              "SpecifiedImage": "192023623294.dkr.ecr.us-west-2.amazonaws.com/petclassification-sagemaker:20200122122128_513734",
              "ResolvedImage": "192023623294.dkr.ecr.us-west-2.amazonaws.com/petclassification-sagemaker@sha256:a7016dc5fb7cc6949c9890cc06687d227e0e7316ceb44b05e4cc200a47ba8194",
              "ResolutionTime": "2020-01-22 16:16:03.782000-08:00"
            }
          ],
          "CurrentWeight": 1.0,
          "DesiredWeight": 1.0,
          "CurrentInstanceCount": 1,
          "DesiredInstanceCount": 1
        }
      ],
      "EndpointStatus": "InService",
      "CreationTime": "2020-01-22 16:16:01.096000-08:00",
      "LastModifiedTime": "2020-01-22 16:24:12.725000-08:00",
      "ResponseMetadata": {
        "RequestId": "578d4cae-261b-4798-ad77-9e3804ac8f6c",
        "HTTPStatusCode": 200,
        "HTTPHeaders": {
          "x-amzn-requestid": "578d4cae-261b-4798-ad77-9e3804ac8f6c",
          "content-type": "application/x-amz-json-1.1",
          "content-length": "839",
          "date": "Thu, 23 Jan 2020 00:31:01 GMT"
        },
        "RetryAttempts": 0
      }
    },
    "timestamp": "2020-01-23T00:31:02.154484Z"
  },
  "createdAt": "2020-01-23T00:06:56.469823Z",
  "lastUpdatedAt": "2020-01-23T00:06:56.469868Z"
}
In [40]:
!bentoml sagemaker list
NAME                      NAMESPACE    LABELS    PLATFORM       STATUS    AGE
my-fastai-pet-classifier  dev                    aws-sagemaker  running   24 minutes and 11.86 seconds
In [ ]:
!aws sagemaker-runtime invoke-endpoint \
  --endpoint-name dev-my-fastai-pet-classifier \
  --body file:///Users/bozhaoyu/src/bento_gallery/fast-ai/pet-image-classification/test.jpg \
  --content-type "image/jpg" \
  output.json && cat output.json
In [62]:
!bentoml sagemaker delete my-fastai-pet-classifier
Successfully deleted AWS Sagemaker deployment "my-fastai-pet-classifier"
In [ ]: