在边缘设备上使用 Neo 入门 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在边缘设备上使用 Neo 入门

这份 Amazon SageMaker Neo 入门指南向您展示了如何在设备上编译模型、设置设备和进行推断。大多数代码示例都使用 Boto3。我们在适用的 Amazon CLI 情况下提供命令,以及有关如何满足 Neo 先决条件的说明。

注意

您可以在本地计算机、 SageMaker 笔记本电脑、 SageMaker Studio 中或(视您的边缘设备而定)在边缘设备上运行以下代码片段。设置类似;但是,如果您在 SageMaker 笔记本实例或 SageMaker Studio 会话中运行本指南,则有两个主要的例外情况:

  • 您不需要安装 Boto3。

  • 您不需要添加 ‘AmazonSageMakerFullAccess’ IAM 策略

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

先决条件

  1. 安装 Boto3

    如果您在边缘设备上运行这些命令,则必须安装 Amazon SDK for Python (Boto3)。在 Python 环境(最好是虚拟环境)中,在边缘设备的终端本地或 Jupyter 笔记本实例中运行以下命令:

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

    您需要在设备上设置 Amazon Web Services 凭证才能运行 SDK for Python (Boto3)。默认情况下, Amazon 凭证应存储在边缘设备~/.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

    《Amazon 通用参考指南》提供有关如何获取必需的 aws_access_key_idaws_secret_access_key 的说明。有关如何在设备上设置凭证的更多信息,请参阅 Boto3 文档。

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

    Neo 需要访问您的 S3 存储桶 URI。创建可以运行 SageMaker并有权访问 S3 URI 的 IAM 角色。您可以使用 SDK for Python (Boto3)、控制台或 Amazon 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'

    有关如何使用控制台或通过 Amazon API 创建 IAM 角色的更多信息 Amazon CLI,请参阅在您的 Amazon 账户中创建 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