Neo on Edge 裝置入門 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Neo on Edge 裝置入門

本 Amazon SageMaker Neo 入門指南說明如何編譯模型、設定裝置以及如何在裝置上進行推論。大多數程式碼範例使用 Boto3。我們提供在適用情 AWS CLI 況下使用的命令,以及如何滿足 Neo 先決條件的說明。

注意

您可以在本機電腦、 SageMaker 筆記本內、 SageMaker Studio 或邊緣裝置上執行下列程式碼片段 (視您的邊緣裝置而定)。設定類似;不過,如果您在 SageMaker 筆記本執行個體或 SageMaker Studio 工作階段中執行本指南,則有兩個主要例外:

  • 您不需要安裝 Boto3。

  • 您不需要新增 ‘AmazonSageMakerFullAccess’ IAM 政策

本指南假設您正在邊緣裝置上執行下列指示。

必要條件

  1. 安裝 Boto3

    如果您要在邊緣裝置上執行這些命令,則必須安裝 AWS SDK for Python (Boto3)。在 Python 環境 (最好是虛擬環境) 中,在邊緣裝置的終端或 Jupyter 筆記本執行個體中本機執行以下操作:

    Terminal
    pip install boto3
    Jupyter Notebook
    !pip install boto3
  2. 設定 AWS 身份證明

    您必須在裝置上設定 Amazon Web Services 憑證,以執行 SDK for Python (Boto3)。根據預設,認 AWS 證應儲存在 Edge 裝置~/.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_idaws_secret_access_key 的指示。如需如何在裝置上設定憑證的詳細資訊,請參閱 Boto3 文件。

  3. 設定 IAM 角色並連接政策。

    Neo 需要存取您的 S3 儲存貯體 URI。建立可執行 SageMaker且具有存取 S3 URI 權限的 IAM 角色。您可以使用適用 SDK for Python (Boto3)、主控台或 AWS 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'

    如需如何使用主控台或透過 AWS API 建立 IAM 角色的詳細資訊 AWS CLI,請參閱在您的 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 Resource 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. 訓練機器學習模型

    如 SageMaker需有關如何使用 Amazon 訓練機器學習模型的詳細資訊,請參閱使用 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 取代為您 Amazon S3 儲存貯體的名稱。

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