SageMakerの組み込みアルゴリズムで作成し、保存したモデルを再デプロイする方法

# はじめに
本稿では、SageMakerで作成し、ローカルに保存したモデル(model.tar.gz)をもう一度デプロイする方法を説明します。

※今回私がデプロイするのは、犬の顔検出モデルです。

# 前提
- 既にSageMakerで作成したモデルをローカルに保存している。

# 実践



### モデルのアップロード

- まず、S3でバケットを作成します。  
バケット作成を選択。
<img width="804" alt="001.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/a7aea249-fa39-d412-8db6-01eb99bc4817.png">

- 任意のバケット名を付けて、作成を選択。

※今回はテストのため、アクセス許可の設定などは行いませんが、実際に利用する際は、適切な設定を行ってください。

<img width="653" alt="002.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/01a1246d-84e1-511f-34c3-9ab36c437003.png">

- 作成したバケットを開いて、アップロードを選択。  
私は、バケット内にmodelというフォルダを作成し、その中にアップロードします。

<img width="922" alt="003.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/7c636198-885f-05cb-ea03-a243b485aa49.png">

- ローカルに保存しているモデルを選択し、アップロードを選択。

<img width="656" alt="004.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/884a899b-2c2a-465e-f11d-25115fcf6db3.png">

これで、モデルのアップロードは終了です。

### モデルのデプロイ

- Sagemaker のノートブックインスタンスから、Create notebook instance を選択。
<img width="712" alt="005.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/a870391f-48c0-9642-dad1-9585d0f51d2a.png">

- ノートブックインスタンスに任意の名前を付けます。

<img width="648" alt="006.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/12f21d3d-9391-a16b-cc64-d28b69818ce6.png">

- 下にスクロールし、IAM ロールの一番上のタブを選択し、新しいロールの作成を選択。

<img width="641" alt="007.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/d01fc9f6-4d6a-5d71-03c7-71751ed5d303.png">

- 特定の S3 バケットにチェックを入れ、先ほど作成した S3 バケットノ名前を入力し、ロールの作成を選択。

<img width="612" alt="008.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/dd7529af-0c8f-db8e-3b80-9ef2c4d9205f.png">

- 下にスクロールして、ノートブックインスタンスの作成を選択。

<img width="627" alt="009.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/d95d7120-b51a-d7ab-356b-101f8904a4f7.png">

- ステータスがInServiceになったら、Open Jupyterを選択。

<img width="731" alt="010.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/a71a04b6-e0df-8174-73be-e60f69d563ce.png">

- Jupyter が開いたら、New から conda_mxnet_p36 を選択。

<img width="889" alt="011.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/e4846df1-cd8e-d34d-2643-629b47905af4.png">

- Notebook を選択したら、Untitled を選択。

<img width="863" alt="012.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/0dd5333b-1c5c-b38b-ef01-64d47d429f05.png">

- 任意の名前を Notebook に付け、Rename を選択。

<img width="520" alt="013.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/a45971f3-12d7-88f8-1e04-f63a7112de52.png">

- 次のコードを実行して、モデルをデプロイしましょう。 
このコードの実行完了には5分ほど時間がかかりました。

 - model_data : 先ほどモデルを保存したパス
 - image : 推論時に利用する Docker イメージ名  
 Docker イメージ名は**[こちら](https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)**から参照してください。

```Python
#S3にアップロードしたモデルをデプロイ
import sagemaker
from sagemaker import get_execution_role
from sagemaker.model import Model

import boto3
import json

role = get_execution_role()
model =  Model(model_data='s3://dog-face/model/model.tar.gz',
               image='501404015308.dkr.ecr.ap-northeast-1.amazonaws.com/object-detection:latest',
               role=role)

model_detection = model.deploy(initial_instance_count=1, instance_type='ml.m4.xlarge')

```

実行結果

- - の後に ! がついたら、モデルのデプロイ完了です。

```
----------------------------------------------------------------------------------------------------------------!
```

# おわりに
今回は、SageMakerの組み込みアルゴリズムで作成したモデルを、再デプロイする方法について説明しました。
モデルをローカルに保存してから、再デプロイするという方の参考になればと思います。