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

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

边缘设备上的 Neo 入门

本指南介绍了 Amazon SageMaker Neo 的入门方式,向您展示了如何编译模型、设置设备以及在您的设备上进行推断。大多数代码示例都使用 Bot3。我们提供使用Amazon CLI以及如何满足 Neo 先决条件的说明.

注意

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

  • 您不需要安装 Bto3。

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

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

Prerequisites

  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) (Bot3)。默认情况下,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。创建一个 IAM 角色,该角色可以运行 SageMaker 并有权访问 S3 URI。您可以使用适用于 Python 的开发工具包 (Boto3)、控制台或Amazon CLI. 以下示例说明如何使用适用于 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'

    有关如何使用控制台创建 IAM 角色的更多信息,请参阅:Amazon CLI,或通过AmazonAPI,请参阅在您的Amazon账户.

    创建描述要附加的 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命令获取coco_ssd_mobilenet模型来自 TensorFlow 的网站。刚刚复制的模型是从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

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

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