

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 先决条件
<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。创建可以运行 A SageMaker I 并有权访问 S3 URI 的 IAM 角色。您可以使用 SDK for Python (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 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 A SageMaker I 和 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 训练机器学习模型](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html)的更多信息，请参阅使用 Amazon A SageMaker I 训练模型。您可以选择将在本地训练的模型直接上传到 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` 替换为您的 S3 存储桶的名称。

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

------