先决条件 - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

先决条件

SageMaker Neo 是一项功能,它允许您训练一次机器学习模型,然后在云端和边缘的任何位置运行它们。在使用 Neo 对模型进行编译和优化之前,需要设置一些先决条件。您必须安装必要的 Python 库,配置 Amazon 证书,创建具有所需权限的 IAM 角色,并设置用于存储模型工件的 S3 存储桶。您还必须准备好经过训练的机器学习模型。以下步骤将指导您完成设置:

  1. 安装 Boto3

    如果您在边缘设备上运行这些命令,则必须安装 适用于 Python (Boto3) 的 Amazon SDK。在 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。创建可以运行 A SageMaker I 并有权访问 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 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' );
  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 AI 训练机器学习模型的更多信息,请参阅使用 Amazon A SageMaker I 训练模型。您可以选择将在本地训练的模型直接上传到 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-filenameamzn-s3-demo-bucket 替换为您的 S3 存储桶的名称。

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