

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

# 前提条件
<a name="neo-getting-started-edge-step0"></a>

SageMaker Neo は、機械学習モデルを一度トレーニングするだけで、その実行をクラウド内のあらゆるエッジで可能にする機能です。Neo でモデルをコンパイルして最適化する前に、いくつかの前提条件を設定する必要があります。必要な Python ライブラリをインストールし、 AWS 認証情報を設定し、必要なアクセス許可を持つ IAM ロールを作成し、モデルアーティファクトを保存するための S3 バケットを設定する必要があります。また、トレーニング済みの機械学習モデルも準備する必要があります。次の手順ではこのセットアップについて説明します。

1. **Boto3 をインストールする**

   エッジデバイスで以下のコマンドを実行する場合は、 AWS SDK for Python (Boto3)をインストールする必要があります。Python 環境 (できれば仮想環境) で、エッジデバイスのターミナルまたは Jupyter ノートブックインスタンス内で以下をローカルに実行します。

------
#### [ Terminal ]

   ```
   pip install boto3
   ```

------
#### [ Jupyter Notebook ]

   ```
   !pip install boto3
   ```

------

1.  ** AWS 認証情報のセットアップ** 

   SDK for Python (Boto3) を実行するには、デバイスに Amazon Web Services の認証情報を設定する必要があります。デフォルトでは、 AWS 認証情報はエッジデバイスの `~/.aws/credentials` ファイルに保存する必要があります。認証情報ファイル内には `aws_access_key_id` と `aws_secret_access_key` の 2 つの環境変数があります。

   ターミナルで以下を実行します。

   ```
   $ more ~/.aws/credentials
   
   [default]
   aws_access_key_id = {{YOUR_ACCESS_KEY}}
   aws_secret_access_key = {{YOUR_SECRET_KEY}}
   ```

   [AWS 全般のリファレンスガイド](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys)に、必要な `aws_access_key_id` と `aws_secret_access_key` を取得する手順があります。デバイスで認証情報を設定する方法の詳細については、[Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration) のドキュメントを参照してください。

1.  **IAM ロールを設定しポリシーをアタッチする** 

   Neo は S3 バケット URI へのアクセスが必要です。SageMaker AI を実行でき、S3 URI にアクセスする許可を持つ IAM ロールを作成します。IAM ロールは、SDK for Python (Boto3)、コンソールまたは AWS CLIを使って作成できます。次の例は、SDK for Python (Boto3) を使って IAM ロールを作成する方法を示しています。

   ```
   import boto3
   
   AWS_REGION = {{'aws-region'}}
   
   # Create an IAM client to interact with IAM
   iam_client = boto3.client('iam', region_name=AWS_REGION)
   role_name = {{'role-name'}}
   ```

   コンソールまたは AWS API を使用して IAM ロールを作成する方法の詳細については AWS CLI、[AWS 「アカウントでの IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_api)」を参照してください。

    アタッチする IAM ポリシーを記述するディクショナリを作成します。このポリシーは、新しい IAM ロールの作成に使われます。

   ```
   policy = {
       'Statement': [
           {
               'Action': 'sts:AssumeRole',
               'Effect': 'Allow',
               'Principal': {'Service': 'sagemaker.amazonaws.com'},
           }],  
        'Version': '2012-10-17		 	 	 '
   }
   ```

   上で定義したポリシーを使って、新しい IAM ロールを作成します。

   ```
   import json 
   
   new_role = iam_client.create_role(
       AssumeRolePolicyDocument=json.dumps(policy),
       Path='/',
       RoleName=role_name
   )
   ```

   Amazon リソースネーム (ARN) は、後のステップでコンパイルジョブを作成するときに知っておく必要があるため、変数にも保存します。

   ```
   role_arn = new_role['Role']['Arn']
   ```

    新しいロールを作成できたので、Amazon SageMaker AI および Amazon S3 とのやり取りに必要な許可をアタッチします。

   ```
   iam_client.attach_role_policy(
       RoleName=role_name,
       PolicyArn='arn:aws:iam::aws:policy/AmazonSageMakerFullAccess'
   )
   
   iam_client.attach_role_policy(
       RoleName=role_name,
       PolicyArn='arn:aws:iam::aws:policy/AmazonS3FullAccess'
   );
   ```

1. **モデルアーティファクトを保存する Amazon S3 バケットを作成する**

   SageMaker Neo は Amazon S3 からモデルアーティファクトにアクセスします

------
#### [ Boto3 ]

   ```
   # Create an S3 client
   s3_client = boto3.client('s3', region_name=AWS_REGION)
   
   # Name buckets
   bucket='name-of-your-bucket'
   
   # Check if bucket exists
   if boto3.resource('s3').Bucket(bucket) not in boto3.resource('s3').buckets.all():
       s3_client.create_bucket(
           Bucket=bucket,
           CreateBucketConfiguration={
               'LocationConstraint': AWS_REGION
           }
       )
   else:
       print(f'Bucket {bucket} already exists. No action needed.')
   ```

------
#### [ CLI ]

   ```
   aws s3 mb s3://{{'name-of-your-bucket'}} --region {{specify-your-region}} 
   
   # Check your bucket exists
   aws s3 ls s3://{{'name-of-your-bucket'}}/
   ```

------

1. **機械学習モデルをトレーニングする**

   Amazon SageMaker AI を使って機械学習モデルをトレーニングする方法の詳細については、「[Train a Model with Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html)」を参照してください。任意で、ローカルでトレーニングしたモデルを Amazon S3 URI バケットに直接アップロードできます。
**注記**  
 使ったフレームワークに応じて、モデルが正しくフォーマットされていることを確認します。「[SageMaker Neo が想定する入力データの形状](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs)」を参照してください。

   まだモデルがない場合は、`curl` コマンドを使って TensorFlow のウェブサイトから `coco_ssd_mobilenet` モデルのローカルコピーを取得します。いまコピーしたモデルは、[COCO データセット](https://cocodataset.org/#home)を使ってトレーニングされたオブジェクト検出モデルです。Jupyter ノートブックに次を入力します。

   ```
   model_zip_filename = './coco_ssd_mobilenet_v1_1.0.zip'
   !curl http://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip \
       --output {model_zip_filename}
   ```

   このサンプルは .zip ファイルにパッケージ化されていることに注意してください。このファイルを解凍し、圧縮された tar ファイル (`.tar.gz`) として再パッケージ化してから、後のステップでそれを使います。Jupyter ノートブックに次を入力します。

   ```
   # Extract model from zip file
   !unzip -u {model_zip_filename}
   
   model_filename = 'detect.tflite'
   model_name = model_filename.split('.')[0]
   
   # Compress model into .tar.gz so SageMaker Neo can use it
   model_tar = model_name + '.tar.gz'
   !tar -czf {model_tar} {model_filename}
   ```

1. **トレーニング済みモデルを S3 バケットにアップロードする**

   機械学習モデルをトレーニングしたら、それを S3 バケットに保存します。

------
#### [ Boto3 ]

   ```
   # Upload model        
   s3_client.upload_file(Filename=model_filename, Bucket=bucket, Key=model_filename)
   ```

------
#### [ CLI ]

   `your-model-filename` と `amzn-s3-demo-bucket` をお使いの S3 バケットの名前に置き換えます。

   ```
   aws s3 cp {{your-model-filename}} s3://{{amzn-s3-demo-bucket}}
   ```

------