Edge 设备上的 Neo 入门 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

Edge 设备上的 Neo 入门

本指南介绍了 Amazon SageMaker Neo 入门,向您介绍如何编译模型、设置设备以及在设备上进行推理。大多数代码示例使用 Boto3。我们将AWS CLI使用 提供相关命令,并提供有关如何满足 Neo 的先决条件的说明。

注意

您可以在本地计算机上SageMaker、笔记本中SageMaker 中或边缘设备(具体取决于边缘设备)上运行以下代码段。设置类似;但是,如果您在SageMaker笔记本实例或 SageMaker Studio 会话中运行本指南,则有两个主要异常:

  • 您无需安装 Boto3。

  • 您无需添加‘AmazonSageMakerFullAccess’IAM策略

本指南假定您在 边缘设备上运行以下说明。

Prerequisites

  1. 安装 Boto3

    如果您在边缘设备上运行这些命令,则必须安装 适用于 Python (Boto3) 的 AWS 软件开发工具包。在 Python 环境(最好是虚拟环境)内,在边缘设备的终端上或在 Jupyter 笔记本实例中本地运行以下命令:

    Terminal
    $ pip install boto3
    Jupyter Notebook
    !pip install boto3
  2. 设置 AWS 凭证

    您需要在设备上设置 Amazon Web Services 凭证才能运行 适用于 Python (Boto3) 的开发工具包。默认情况下,AWS 凭证应存储在 ~/.aws/credentials 边缘设备上的 文件中。在凭证文件中,您应看到两个环境变量: aws_access_key_idaws_secret_access_key

    在您的终端中,运行:

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

    AWS 一般参考指南提供了有关如何获取必要的 aws_access_key_id 和 的说明aws_secret_access_key。有关如何在设备上设置凭证的更多信息,请参阅 Boto3 文档。

  3. 设置 IAM 角色并附加策略。

    Neo 需要访问您的 S3 存储桶 URI。创建一个 IAM 角色,该角色可以运行SageMaker并有权访问 S3 URI。您可以使用 IAM、 控制台或 创建 适用于 Python (Boto3) 的开发工具包 角色AWS CLI。以下示例说明如何使用 创建 IAM 角色适用于 Python (Boto3) 的开发工具包:

    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'

    有关如何使用 控制台、 IAM或 AWS CLI API 创建 AWS 角色的更多信息,请参阅在您的 AWS 账户创建 IAM 用户。

    创建描述要附加的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 和 交互所需的权限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' );
  4. 创建 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'/
  5. 训练机器学习模型

    有关如何使用 训练机器学习模型Amazon SageMaker的更多信息,请参阅使用 训练模型Amazon SageMaker。您可以选择将本地训练的模型直接上传到 Amazon S3 URI 存储桶中。

    注意

    确保根据您使用的框架正确格式化模型。请参阅 SageMaker Neo 所需的输入数据形状是什么?

    如果您还没有模型,请使用 curl 命令从 TensorFlow 的网站获取coco_ssd_mobilenet模型的本地副本。您刚刚复制的模型是从 COCO 数据集训练的对象检测模型。在 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}
  6. 将训练后的模型上传到 S3 存储桶

    在训练机器学习模式后,将其存储在 S3 存储桶中。

    Boto3
    # Upload model s3_client.upload_file(filename=model_filename, bucket=bucket, key=model_filename)
    CLI

    your-model-filenameyour-S3-bucket 替换为您的 S3 存储桶的名称。

    $ aws s3 cp your-model-filename s3://your-S3-bucket