

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# モデルをパッケージ化する方法
<a name="edge-packaging-job"></a>

SageMaker Edge Manager のパッケージ化ジョブは Amazon SageMaker Neo でコンパイルされたモデルを使用します。また、推論エンジンである Edge Manager エージェントを使って、モデルのデプロイに必要な変更を加えます。

**Topics**
+ [前提条件を満たす](edge-packaging-job-prerequisites.md)
+ [モデルをパッケージ化する (Amazon SageMaker AI コンソール)](edge-packaging-job-console.md)
+ [モデルをパッケージ化する (Boto3)](edge-packaging-job-boto3.md)

# 前提条件を満たす
<a name="edge-packaging-job-prerequisites"></a>

モデルをパッケージ化するには、以下を実行する必要があります。

1. **SageMaker AI Neo を使用して機械学習モデルをコンパイルする。**

   コンパイルが済んでいない場合は、SageMaker Neo を使用してモデルをコンパイルします。モデルをコンパイルする方法の詳細については、「[Neo でモデルをコンパイルしてデプロイする](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html)」を参照してください。SageMaker Neo を初めてお使いになる方は「[Neo Edge デバイスのご利用開始にあたって](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html)」を確認してください。

1. **コンパイルジョブの名前を取得する。**

   SageMaker Neo でモデルをコンパイルしたときに使ったコンパイルジョブ名を指定します。[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) で SageMaker AI コンソールを開き、**コンパイルジョブ**を選択して、 AWS アカウントに送信されたコンパイルのリストを検索します。送信されたコンパイルジョブの名前は **[Name]** (名前) 列にあります。

1. **IAM ARN を取得する。**

   モデルのダウンロードとアップロード、SageMaker Neo との通信に使用する、IAM ロールの Amazon リソースネーム (ARN) が必要です。

   IAM ARN を取得するには、以下のいずれかの方法を実行します。
   + **SageMaker AI Python SDK を使用してプログラム的に行う**

     ```
     import sagemaker
     
     # Initialize SageMaker Session object so you can interact with AWS resources
     sess = sagemaker.Session()
     
     # Get the role ARN 
     role = sagemaker.get_execution_role()
     
     print(role)
     >> arn:aws:iam::<your-aws-account-id>:role/<your-role-name>
     ```

     SageMaker Python SDK の使い方の詳細については、「[SageMaker AI Python SDK API](https://sagemaker.readthedocs.io/en/stable/index.html)」を参照してください。
   + ** AWS Identity and Access Management (IAM) コンソールの使用**

     IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) に移動します。IAM の **[Resources]** (リソース) セクションで **[Roles]** (ロール) を選択して、 AWS アカウントのロールをリスト表示します。`AmazonSageMakerFullAccess`、`AWSIoTFullAccess`、`AmazonS3FullAccess` を持つロールを選択または作成します。

     詳細については、「[IAM とは](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)」を参照してください。

1. **S3 バケット URI を把握する。**

   Neo でコンパイルされたモデル、Edge Manager のパッケージ化ジョブの出力、およびデバイスフリートからのサンプリングデータを保存するには、1 つ以上の Amazon Simple Storage Service (Amazon S3) バケット URI が必要です。

   Amazon S3 バケットを作成するには、次のいずれかの方法を実行します。
   + **SageMaker AI Python SDK を使用してプログラム的に行う**

     セッション中は、デフォルトの Amazon S3 バケットを使用できます。デフォルトのバケットは、`sagemaker-{region}-{aws-account-id}` の形式に基づいて作成されます。SageMaker Python SDK を使用してデフォルトのバケットを作成するには、以下を使用します。

     ```
     import sagemaker
     
     session=sagemaker.create_session()
     
     bucket=session.default_bucket()
     ```
   + **Amazon S3 コンソールの使用**

     Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。詳細な手順については「[S3 バケットを作成する方法](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)」を参照してください。

# モデルをパッケージ化する (Amazon SageMaker AI コンソール)
<a name="edge-packaging-job-console"></a>

Amazon SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を使用して、SageMaker Edge Manager のパッケージ化ジョブを作成できます。作業を進める前に、[前提条件を満たす](edge-packaging-job-prerequisites.md)を満たしていることを確認してください。

1. 次の図に示すように、SageMaker AI コンソールで **[エッジ推論]** を選択して、次に **[Edge パッケージングジョブを作成]** を選択します。  
![\[コンソールの [Edge パッケージングジョブを作成] の場所。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/smith/pre-edge-packaging-button-edited.png)

1. **[Job properties]** (ジョブプロパティ) ページの **[Edge packaging job name]** (エッジパッケージ化ジョブ名) で、パッケージ化ジョブの名前を入力します。Edge Manager のパッケージ化ジョブ名では、大文字と小文字が区別されます。**Model name** (モデル名) および **[Model version]** (モデルバージョン) で、それぞれモデルの名前を入力し、バージョンを指定します。

1. 次に、**[IAM role]** (IAM ロール) を選択します。ロールを選択か、または AWS がロールを自動的に作成します。任意で、**[Resource key ARN]** (リソースキー ARN) と **[job tags]** (ジョブタグ) を指定します。

1. [**次へ**] を選択します。  
![\[コンソールの [ジョブのプロパティ] セクションの例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/smith/create-edge-packaging-job-filled.png)

1. **[Compilation job name]** (コンパイルジョブ名) フィールドに、SageMaker Neo でモデルをコンパイルするときに使ったコンパイルジョブの名前を指定します。[**次へ**] を選択します。  
![\[コンソールの [モデルソース] セクションの例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/smith/create-edge-packaging-job-model-source-filled.png)

1. **[Output configuration]** (出力設定) ページで、パッケージ化ジョブの出力を保存する Amazon S3 バケット URI を入力します。  
![\[コンソールの [出力設定] ページの例。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/smith/create-device-fleet-output-filled.png)

   **[Edge packaging jobs]** (エッジパッケージ化ジョブ) ページの **[Status]** (ステータス) 列が **[IN PROGRESS]** (進行中) になります。パッケージ化ジョブが完了すると、ステータスは **[COMPLETED]** (完了) になります。

   パッケージ化ジョブを選択すると、そのジョブの設定に移動します。**[Job settings]** (ジョブ設定) セクションには、ジョブ名、ARN、ステータス、作成時刻、最終更新時刻、パッケージ化ジョブの所要時間、ロール ARN が表示されます。

   **[Input configuration]** (入力設定) セクションには、モデルアーティファクトの場所、データの入力設定、モデルの機械学習フレームワークが表示されます。

   **[Output configuration]** (出力設定) セクションには、パッケージ化ジョブの出力場所、コンパイル済みのモデルのターゲットデバイス、作成した場合はタグが表示されます。

1. デバイスフリートの詳細に移動するには、デバイスフリートの名前を選択します。このページには、デバイスフリートの名前、ARN、説明 (指定した場合)、フリートの作成日、フリートが最後に変更された時刻、Amazon S3 バケット URI、 AWS KMS キー ID (指定した場合)、 AWS IoT エイリアス (提供した場合)、IAM ロールが表示されます。タグを追加した場合、タグは **[Device fleet tags]** (デバイスフリートのタグ) セクションに表示されます。

# モデルをパッケージ化する (Boto3)
<a name="edge-packaging-job-boto3"></a>

 AWS SDK for Python (Boto3)を使用して SageMaker Edge Manager のパッケージ化ジョブを作成できます。作業を進める前に、[前提条件を満たす](edge-packaging-job-prerequisites.md)を満たしていることを確認してください。

エッジパッケージ化ジョブをリクエストするには、`CreateEdgePackagingJob` を使います。エッジパッケージ化ジョブの名前、SageMaker Neo のコンパイルジョブの名前、ロールの Amazon リソースネーム (ARN)、モデルの名前、モデルのバージョン、パッケージ化ジョブの出力を保存する Amazon S3 バケット URI を指定する必要があります。Edge Manager のパッケージ化ジョブ名と SageMaker Neo のコンパイルジョブ名では、大文字と小文字が区別されます。

```
# Import AWS SDK for Python (Boto3)
import boto3

# Create Edge client so you can submit a packaging job
sagemaker_client = boto3.client("sagemaker", region_name='aws-region')

sagemaker_client.create_edge_packaging_job(
    EdgePackagingJobName="edge-packaging-name",
    CompilationJobName="neo-compilation-name",
    RoleArn="arn:aws:iam::99999999999:role/rolename",
    ModelName="sample-model-name",
    ModelVersion="model-version",
    OutputConfig={
        "S3OutputLocation": "s3://your-bucket/",
    }
)
```

エッジパッケージ化ジョブのステータスは、`DescribeEdgePackagingJob` を使い、エッジパッケージ化ジョブ名 (大文字と小文字を区別します) を指定することで確認できます。

```
response = sagemaker_client.describe_edge_packaging_job(
                                    EdgePackagingJobName="edge-packaging-name")
```

これにより、パッケージ化ジョブのステータスのポーリングに使用できるディクショナリが返されます。

```
# Optional - Poll every 30 sec to check completion status
import time

while True:
    response = sagemaker_client.describe_edge_packaging_job(
                                         EdgePackagingJobName="edge-packaging-name")
    
    if response['EdgePackagingJobStatus'] == 'Completed':
        break
    elif response['EdgePackagingJobStatus'] == 'Failed':
        raise RuntimeError('Packaging job failed')
    print('Packaging model...')
    time.sleep(30)
print('Done!')
```

パッケージ化ジョブのリスト表示については、`ListEdgePackagingJobs` を使います。この API を使用すると、特定のパッケージ化ジョブを検索できます。`NameContains` に名前の一部を指定して、パッケージ化ジョブ名にフィルターを適用します。また、`ModelNameContains` に名前の一部を指定して、指定した名前を含むジョブ内のモデルにフィルターを適用します。また、`SortBy` に並べ替えに使用する列、`SortOrder` に並べ替えの順序 (`Ascending` または `Descending`) を指定します。

```
sagemaker_client.list_edge_packaging_jobs(
    "NameContains": "sample",
    "ModelNameContains": "sample",
    "SortBy": "column-name",
    "SortOrder": "Descending"
)
```

パッケージ化ジョブを停止するには、`StopEdgePackagingJob` を使い、エッジパッケージ化ジョブの名前を入力します。

```
sagemaker_client.stop_edge_packaging_job(
        EdgePackagingJobName="edge-packaging-name"
)
```

Edge Manager API の完全なリストについては、[Boto3 のドキュメント](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)を参照してください。