

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 先決條件
<a name="neo-getting-started-edge-step0"></a>

SageMaker Neo 是一項功能，讓您只要訓練機器學習模型一次，就能在雲端和邊緣的任何位置執行該模型。您必須先設定幾個先決條件，才能使用 Neo 編譯和最佳化模型。您必須安裝必要的 Python 程式庫、設定您的 AWS 登入資料、建立具有必要許可的 IAM 角色，以及設定用於儲存模型成品的 S3 儲存貯體。您還必須準備好經過訓練的機器學習模型。該精靈會引導您完成設定：

1. **安裝 Boto3**

   如果您要在邊緣裝置上執行這些命令，則必須安裝 適用於 Python (Boto3) 的 AWS SDK。在 Python 環境 (最好是虛擬環境) 中，在邊緣裝置的終端或 Jupyter 筆記本執行個體中本機執行以下操作：

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

   ```
   pip install boto3
   ```

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

   ```
   !pip install boto3
   ```

------

1.  **設定 AWS 登入資料** 

   您必須在裝置上設定 Amazon Web Services 憑證，以執行 SDK for Python (Boto3)。根據預設， AWS 登入資料應存放在邊緣裝置上的 `~/.aws/credentials`檔案中。在憑證檔案中，您應該會看到兩個環境變數：`aws_access_key_id` 和 `aws_secret_access_key`。

   在您的終端機中執行：

   ```
   $ 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。建立 IAM 角色以執行 SageMaker AI 且該 IAM 角色具有存取 S3 URI 的許可。您可以使用適用於 Python 的 SDK (Boto3)、主控台或 AWS CLI來建立 IAM 角色。下列範例使用了 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 CLI或透過 AWS API 建立 IAM 角色的詳細資訊，請參閱[在 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 Resource Name (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 訓練機器學習模型的詳細資訊，請參閱[使用 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 檔案封裝。解壓縮此檔案並將其重新封裝為壓縮的 tarfile (`.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` 取代為您 Amazon S3 儲存貯體的名稱。

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

------