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

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

Edge 设备上的 Neo 入门

本亚马逊入门指南 SageMaker Neo 向您展示了如何编译模型、设置设备以及在设备上做出推论。大多数代码示例都使用 Boto3。我们提供命令使用Amazon CLI以及关于如何满足 Neo 先决条件的说明。

注意

您可以在本地计算机上运行以下代码片段 SageMaker 笔记本, SageMaker Studio,或者(取决于边缘设备)在边缘设备上。设置类似;但是,如果在 SageMaker 笔记本实例 SageMaker 演播室会议:

  • 您不需要安装 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 角色。您可以通过使用适用于 Python (Boto3) 的软件开发工具包 (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,请参阅在您的中创建 IAM 用户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 )

    在后面的步骤中创建编译作业时,您需要知道您的亚马逊资源名称 (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