本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SageMaker Neo 是一種功能,可讓您訓練機器學習模型一次,並在雲端和邊緣的任何位置執行。您必須先設定一些先決條件,才能使用 Neo 編譯和最佳化模型。您必須安裝必要的 Python 程式庫、設定登入 AWS 資料、建立具有必要許可的 IAM 角色,以及設定 S3 儲存貯體來存放模型成品。您還必須準備好訓練有素的機器學習模型。下列步驟會引導您完成設定:
-
安裝 Boto3
如果您要在邊緣裝置上執行這些命令,則必須安裝 AWS SDK for Python (Boto3)。在 Python 環境 (最好是虛擬環境) 中,在邊緣裝置的終端或 Jupyter 筆記本執行個體中本機執行以下操作:
pip install boto3
-
設定 AWS 登入資料
您必須在裝置上設定 Amazon Web Services 憑證,以執行 SDK for Python (Boto3)。根據預設, AWS 憑證應存放在您節點裝置上的
~/.aws/credentials
檔案中。在憑證檔案中,您應該會看到兩個環境變數:aws_access_key_id
和aws_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_id
和aws_secret_access_key
的指示。如需如何在裝置上設定憑證的詳細資訊,請參閱 Boto3文件。 -
設定 IAM 角色並連接政策。
Neo 需要存取您的 S3 儲存貯體 URI。建立可執行 SageMaker AI 並具有存取 S3 URI 許可的 IAM 角色。您可以使用適用於 Python 的 SDK (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 CLI或透過 AWS API 建立 IAM 角色的詳細資訊,請參閱在 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 AI 和 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' );
-
建立 Amazon S3 儲存貯體以儲存您的模型成品
SageMaker Neo 將從 Amazon S3 存取您的模型成品
# 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.')
-
訓練機器學習模型
如需如何使用 Amazon SageMaker AI 訓練機器學習模型的詳細資訊,請參閱使用 Amazon SageMaker AI 訓練模型。您可以選擇性地將本機訓練的模型直接上傳到 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}
-
將訓練過的模型上傳到 S3 儲存貯體
訓練完機器學習模式後,請將其儲存在 S3 儲存貯體中。
# Upload model s3_client.upload_file(Filename=model_filename, Bucket=bucket, Key=model_filename)