AWS CLI で SageMaker を操作する。

# はじめに
今回は SageMaker の組み込みアルゴリズムを使った、モデルのデプロイ、推論をAWS CLI を利用して行います。

# 前提

- AWS CLI が使える。
AWS CLI のインストール、設定は [**こちら**](https://docs.aws.amazon.com/ja_jp/streams/latest/dev/kinesis-tutorial-cli-installation.html) を参考にしてください。

- すでに SageMaker で作成した、モデルがある。


# モデルのデプロイ
モデルのデプロイには2つの工程があります。

#### エンドポイントの設定ファイル作成
- まず、create-endpoint-config を使用して、設定ファイルを作成します。
 - --endpoint-config-name : エンドポイントの設定ファイル名
 - --production-variants : 設定を記述したjsonファイル名
 - 他にもオプションで、タグをつけたり、AWS KMS を使用したデータの暗号化などが行えるが、今回は使用しない。  
 他のオプションについては、[**こちら**](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html)を参照してください。

```
$ create-endpoint-config --endpoint-config-name <value> --production-variants <value>
```
- 設定を記述するjsonファイル(--production-variants の入力)のテンプレ
 - VariantName : 同じ設定をする際に使う名前
 - ModelName : 作成したモデルの名前
 - InitialInstanceCount : 最初に起動するインスタンスの数
 - InstanceType : モデルのデプロイに利用するインスタンスタイプ
 - AcceleratorType : Elastic Inference を使用する場合に設定

```
[
  {
    "VariantName": "string",
    "ModelName": "string",
    "InitialInstanceCount": integer,
    "InstanceType": "ml.t2.medium"|"ml.t2.large"|"ml.t2.xlarge"|"ml.t2.2xlarge"|"ml.m4.xlarge"|"ml.m4.2xlarge"|"ml.m4.4xlarge"|"ml.m4.10xlarge"|"ml.m4.16xlarge"|"ml.m5.large"|"ml.m5.xlarge"|"ml.m5.2xlarge"|"ml.m5.4xlarge"|"ml.m5.12xlarge"|"ml.m5.24xlarge"|"ml.c4.large"|"ml.c4.xlarge"|"ml.c4.2xlarge"|"ml.c4.4xlarge"|"ml.c4.8xlarge"|"ml.p2.xlarge"|"ml.p2.8xlarge"|"ml.p2.16xlarge"|"ml.p3.2xlarge"|"ml.p3.8xlarge"|"ml.p3.16xlarge"|"ml.c5.large"|"ml.c5.xlarge"|"ml.c5.2xlarge"|"ml.c5.4xlarge"|"ml.c5.9xlarge"|"ml.c5.18xlarge",
    "AcceleratorType": "ml.eia1.medium"|"ml.eia1.large"|"ml.eia1.xlarge"
  }
]
```

- 実際に create-endpoint-config を使用してみる。

```
$ aws sagemaker create-endpoint-config --endpoint-config-name dog-face-endpoint-config-1 --production-variants file://config.json
```

- config.jsonの中身

```
[
  {
    "ModelName": "dog-face-model",
    "InitialInstanceCount": 1,
    "InstanceType": "ml.m4.xlarge"
  }
]
```

#### エンドポイント作成(モデルのデプロイ)

- create-endpoint を使用して、エンドポイントを作成する。
 - --endpoint-name : 作成するエンドポイントの名前
 - --endpoint-config-name : 先ほど作成したエンドポイントの設定ファイル名

```
create-endpoint --endpoint-name <value> --endpoint-config-name <value>
```

- 実際に create-endpoint を使用する。

```
aws sagemaker create-endpoint --endpoint-name dog-face-endpoint-1 --endpoint-config-name dog-face-endpoint-config-1
```


# 推論
デプロイしたモデルで推論を行います。

- 推論にはinvoke-endpointを使用します。
  - --endpoint-name : 先ほど作成したエンドポイント名
  - --body　:入力データ
  - --content-type : 入力データのMIMEタイプ
  - outfile : 出力ファイル名

```
  invoke-endpoint --endpoint-name <value> --body <value> --content-type <value> outfile <value>
```

- 実際に invoke_endpoint を使用する。

```
aws sagemaker invoke-endpoint --endpoint-name dog-face-endpoint-1 --body file://test.jpeg --content-type image/jpeg outfile out.json
```

# エンドポイント削除
エンドポイントにモデルをデプロイしたままでは、時間単位で課金が発生するので、使わなくなったら、削除しましょう。

- エンドポイントの削除にはdelete-endpointを使用します。
 - --endpoint-name : 先ほど作成したエンドポイント名

```
  delete-endpoint --endpoint-name <value>
```

- 実際に delete_endpoint を使用する。

```
aws sagemaker delete-endpoint --endpoint-name dog-face-endpoint-1
```

# 最後に
今回は、AWS CLI を利用して、モデルのデプロイ、推論、削除を行ってみました。