本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon SageMaker Inference Recommender 的先決條件
您必須先完成先決條件步驟,才能使用 Amazon SageMaker Inference Recommender。例如,我們示範如何針對這兩種類型的 Amazon SageMaker Inference Recommender 建議任務使用 PyTorch (v1.7.1) ResNet-18 預先訓練的模型。顯示的範例使用 AWS SDK for Python (Boto3)。
注意
-
下列程式碼範例使用 Python。如果您在終端機或 AWS CLI中執行下列任何一個程式碼範例,請移除
!
字首字元。 -
您可以在 Amazon SageMaker Studio 筆記本中使用 Python 3 (TensorFlow 2.6 Python 3.8 CPU Optimized) 核心執行下列範例。如需 Studio 的詳細資訊,請參閱 Amazon SageMaker Studio。
-
建立 Amazon IAM的角色 SageMaker。
為 SageMaker 已連接
AmazonSageMakerFullAccess
IAM 受管政策的 Amazon 建立IAM角色。 -
設定您的環境。
匯入相依性,並為 AWS 區域、您的 SageMakerIAM角色 (從步驟 1) 和 SageMaker 用戶端建立變數。
!pip install --upgrade pip awscli botocore boto3 --quiet from sagemaker import get_execution_role, Session, image_uris import boto3 region = boto3.Session().region_name role = get_execution_role() sagemaker_client = boto3.client("sagemaker", region_name=region) sagemaker_session = Session()
-
(選用) 檢閱由 Inference Recommender 進行基準測試的現有模型。
Inference Recommender 從熱門的 Model Zoo 為模型進行基準測試。Inference Recommender 支援您的模型,即使模型尚未進行基準測試。
使用
ListModelMetaData
來取得回應物件,物件會列出一般 Model Zoo 中發現之機器學習模型的網域、架構、任務和模型名稱。您可以在稍後的步驟中使用網域、架構、架構版本、任務和模型名稱,以同時選取推論 Docker 映像,並將模型註冊至 SageMaker 模型登錄檔。下列示範如何使用 SDK for Python (Boto3) 的 列出模型中繼資料:
list_model_metadata_response=sagemaker_client.list_model_metadata()
輸出包含模型摘要 (
ModelMetadataSummaries
) 和回應中繼資料 (ResponseMetadata
),類似下列範例:{ 'ModelMetadataSummaries': [{ 'Domain': 'NATURAL_LANGUAGE_PROCESSING', 'Framework': 'PYTORCH:1.6.0', 'Model': 'bert-base-cased', 'Task': 'FILL_MASK' }, { 'Domain': 'NATURAL_LANGUAGE_PROCESSING', 'Framework': 'PYTORCH:1.6.0', 'Model': 'bert-base-uncased', 'Task': 'FILL_MASK' }, { 'Domain': 'COMPUTER_VISION', 'Framework': 'MXNET:1.8.0', 'Model': 'resnet18v2-gluon', 'Task': 'IMAGE_CLASSIFICATION' }, { 'Domain': 'COMPUTER_VISION', 'Framework': 'PYTORCH:1.6.0', 'Model': 'resnet152', 'Task': 'IMAGE_CLASSIFICATION' }], 'ResponseMetadata': { 'HTTPHeaders': { 'content-length': '2345', 'content-type': 'application/x-amz-json-1.1', 'date': 'Tue, 19 Oct 2021 20:52:03 GMT', 'x-amzn-requestid': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }, 'HTTPStatusCode': 200, 'RequestId': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'RetryAttempts': 0 } }
在此示範中,我們使用 PyTorch (1.7.1 版) ResNet-18 模型來執行映像分類。下列 Python 程式碼範例會將架構、架構版本、網域和任務儲存到變數中,以供之後使用:
# ML framework details framework = 'pytorch' framework_version = '1.7.1' # ML model details ml_domain = 'COMPUTER_VISION' ml_task = 'IMAGE_CLASSIFICATION'
-
將您的機器學習模型上傳到 Amazon S3。
如果您沒有預先訓練的機器學習模型,請使用此 PyTorch (v1.7.1) ResNet-18 模型:
# Optional: Download a sample PyTorch model import torch from torchvision import models, transforms, datasets # Create an example input for tracing image = torch.zeros([1, 3, 256, 256], dtype=torch.float32) # Load a pretrained resnet18 model from TorchHub model = models.resnet18(pretrained=True) # Tell the model we are using it for evaluation (not training). Note this is required for Inferentia compilation. model.eval() model_trace = torch.jit.trace(model, image) # Save your traced model model_trace.save('model.pth')
下載範例推論指令碼
inference.py
。建立code
目錄並將推論指令碼移至code
目錄。# Download the inference script !wget https://aws-ml-blog-artifacts.s3.us-east-2.amazonaws.com/inference.py # move it into a code/ directory !mkdir code !mv inference.py code/
Amazon SageMaker 需要預先訓練的機器學習模型封裝為壓縮TAR檔案 (
*.tar.gz
)。壓縮模型和推論指令碼以滿足此需求:!tar -czf test.tar.gz model.pth code/inference.py
佈建端點時,封存中的檔案會解壓縮到端點上的
/opt/ml/model/
。將模型和模型成品壓縮為
.tar.gz
檔案後,請將它們上傳到 Amazon S3 儲存貯體。下列範例示範如何使用 將模型上傳至 Amazon S3 AWS CLI:!aws s3 cp test.tar.gz s3://
{your-bucket}
/models/ -
選取一個預先建立的 Docker 推論影像,或建立您自己的推論 Docker 映像。
SageMaker 為其內建演算法提供容器,並為一些最常見的機器學習架構提供預先建置的 Docker 映像,例如 Apache MXNet TensorFlow PyTorch、 和 Chainer。如需可用 SageMaker映像的完整清單,請參閱可用的深度學習容器映像
。 如果現有 SageMaker 容器都不符合您的需求,而且您沒有自己的現有容器,請建立新的 Docker 映像。請參閱具有自訂推論程式碼的容器,了解如何建立 Docker 映像的資訊。
下列示範如何使用 SageMaker Python 擷取 1.7.1 PyTorch 版推論映像SDK:
from sagemaker import image_uris ## Uncomment and replace with your own values if you did not define ## these variables a previous step. #framework = 'pytorch' #framework_version = '1.7.1' # Note: you can use any CPU-based instance here, # this is just to set the arch as CPU for the Docker image instance_type = 'ml.m5.2xlarge' image_uri = image_uris.retrieve(framework, region, version=framework_version, py_version='py3', instance_type=instance_type, image_scope='inference')
如需可用 SageMaker 執行個體的清單,請參閱 Amazon SageMaker Pricing
。 -
建立範例承載封存。
建立包含負載測試工具可傳送至 SageMaker 端點之個別檔案的封存。您的推論程式碼必須能夠從範例承載讀取檔案格式。
下列內容會下載此範例在 ResNet-18 模型的後續步驟中使用的 .jpg 映像。
!wget https://cdn.pixabay.com/photo/2020/12/18/05/56/flowers-5841251_1280.jpg
將範例承載壓縮為 tarball:
!tar -cvzf payload.tar.gz flowers-5841251_1280.jpg
將範例承載上傳到 Amazon S3,並記下 Amazon S3URI:
!aws s3 cp payload.tar.gz s3://{bucket}/models/
您需要在稍後的步驟URI中使用 Amazon S3,因此請將它存放在變數中:
bucket_prefix='models' bucket =
'<your-bucket-name>'
# Provide the name of your S3 bucket payload_s3_key = f"{bucket_prefix}/payload.tar.gz" sample_payload_url= f"s3://{bucket}/{payload_s3_key}" -
準備建議任務的模型輸入
針對最後一個先決條件,您可選擇以兩種方式準備您的模型輸入。您可以向模型 SageMaker 登錄檔註冊模型,該登錄檔可用來為模型編製生產的目錄,也可以建立 SageMaker 模型並在建立建議任務時在
ContainerConfig
欄位中指定模型。如果您想要善用模型註冊表提供的功能,例如管理模型版本和自動化模型部署,則第一個選項會是首選。如果您想快速入門,第二個選擇則是理想的選擇。對於第一個選項,請前往步驟 7。對於第二個選項,請略過步驟 7 並前往步驟 8。 -
選項 1:在模型註冊表檔中註冊模型
透過 SageMaker 模型登錄,您可以為生產模型編製目錄、管理模型版本、將中繼資料 (例如訓練指標) 與模型建立關聯、管理模型的核准狀態、將模型部署至生產,以及使用 CI/CD 自動化模型部署。
當您使用 SageMaker 模型登錄來追蹤和管理模型時,它們在模型套件群組中會以版本化模型套件表示。未版本的模型套件不屬於模型群組。模型套件群組包含模型的多個版本或迭代。雖然不需要為註冊表中的每個模型建立它們,但它們可以協助組織所有具有相同目的之各種模型並提供自動版本控制。
若要使用 Amazon SageMaker Inference Recommender,您必須具有版本化模型套件。您可以使用 AWS SDK for Python (Boto3) 或 Amazon SageMaker Studio Classic,以程式設計方式建立版本化模型套件。若要以程式設計方式建立版本化模型套件,請先使用
CreateModelPackageGroup
建立模型套件群組API。接下來,使用CreateModelPackage
建立模型套件API。呼叫此方法會建立版本化的模型套件。如需如何使用 和 建立模型群組 註冊模型版本 Amazon SageMaker Studio Classic,以程式設計和互動方式分別建立模型套件群組以及如何建立版本化模型套件的詳細說明,請參閱 AWS SDK for Python (Boto3) 和 。
下列程式碼範例示範如何使用 AWS SDK for Python (Boto3)建立版本化模型套件。
注意
您不需要核准模型套件即可建立 Inference Recommender 任務。
-
建立模型套件群組
使用 建立模型套件群組
CreateModelPackageGroup
API。針對ModelPackageGroupName
為模型套件群組提供名稱,並選擇性地在ModelPackageGroupDescription
欄位中提供模型套件的描述。model_package_group_name =
'<INSERT>'
model_package_group_description ='<INSERT>'
model_package_group_input_dict = { "ModelPackageGroupName" : model_package_group_name, "ModelPackageGroupDescription" : model_package_group_description, } model_package_group_response = sagemaker_client.create_model_package_group(**model_package_group_input_dict)如需可傳遞給 的選用和必要引數的完整清單,請參閱 Amazon SageMaker API 參考指南
CreateModelPackageGroup
。透過指定執行推論程式碼的 Docker 映像和模型成品的 Amazon S3 位置,並為 提供值來建立模型套件
InferenceSpecification
。InferenceSpecification
應包含可使用此模型套件執行模型的推論任務相關資訊,包括下列項目:-
執行推論程式碼之映像的 Amazon ECR 路徑。
-
(選用) 模型套件支援用於轉換任務的執行個體類型,以及用於推論的即時端點。
-
模型套件支援用於推論的輸入和輸出內容格式。
此外,建立模型套件時,您必須指定下列參數:
-
網域:模型套件及其元件的機器學習網域。常見的機器學習網域包括電腦視覺和自然語言處理。
-
任務:模型套件完成的機器學習任務。常見的機器學習任務包括物件偵測和映像分類。如果API參考指南中列出的任何任務都不符合您的使用案例,請指定「OTHER」。如需支援的機器學習任務清單,請參閱任務API欄位描述。
-
SamplePayloadUrl:存放範例承載的 Amazon Simple Storage Service (Amazon S3) 路徑。此路徑必須指向單一GZIP壓縮TAR封存 (.tar.gz 尾碼)。
-
架構:模型套件容器映像的機器學習架構。
-
FrameworkVersion:模型套件容器映像的架構版本。
如果您提供執行個體類型的允許清單,以用於即時產生 的推論SupportedRealtimeInferenceInstanceTypes,推論建議程式會在
Default
任務期間限制執行個體類型的搜尋空間。如有預算限制,或知道有一組特定的執行個體類型可支援您的模型和容器映像檔,請使用此參數。在上一個步驟中,我們下載了預先訓練的 ResNet18 模型,並將其存放在名為 的目錄中的 Amazon S3 儲存貯體中
models
。我們擷取了 PyTorch (v1.7.1) 深度學習容器推論映像,並將 存放在名為 的變數URI中。image_uri
使用下列程式碼範例中的這些變數來定義用來輸入CreateModelPackage
的字典API。# Provide the Amazon S3 URI of your compressed tarfile # so that Model Registry knows where to find your model artifacts bucket_prefix='models' bucket =
'<your-bucket-name>'
# Provide the name of your S3 bucket model_s3_key = f"{bucket_prefix}/test.tar.gz" model_url= f"s3://{bucket}/{model_s3_key}" # Similar open source model to the packaged model # The name of the ML model as standardized by common model zoos nearest_model_name = 'resnet18' # The supported MIME types for input and output data. In this example, # we are using images as input. input_content_type='image/jpeg' # Optional - provide a description of your model. model_package_description ='<INSERT>'
## Uncomment if you did not store the domain and task in an earlier ## step #ml_domain = 'COMPUTER_VISION' #ml_task = 'IMAGE_CLASSIFICATION' ## Uncomment if you did not store the framework and framework version ## in a previous step. #framework = 'PYTORCH' #framework_version = '1.7.1' # Optional: Used for optimizing your model using SageMaker Neo # PyTorch uses NCHW format for images data_input_configuration = "[[1,3,256,256]]" # Create a dictionary to use as input for creating a model pacakge group model_package_input_dict = { "ModelPackageGroupName" : model_package_group_name, "ModelPackageDescription" : model_package_description, "Domain": ml_domain, "Task": ml_task, "SamplePayloadUrl": sample_payload_url, "InferenceSpecification": { "Containers": [ { "Image": image_uri, "ModelDataUrl": model_url, "Framework": framework.upper(), "FrameworkVersion": framework_version, "NearestModelName": nearest_model_name, "ModelInput": {"DataInputConfig": data_input_configuration} } ], "SupportedContentTypes": [input_content_type] } } -
-
建立模型套件
使用
CreateModelPackage
API建立模型套件。傳遞在上一步中定義的輸入字典:model_package_response = sagemaker_client.create_model_package(**model_package_input_dict)
您需要模型套件ARN才能使用 Amazon SageMaker Inference Recommender。記下模型套件ARN的 或將其存放在變數中:
model_package_arn = model_package_response["ModelPackageArn"] print('ModelPackage Version ARN : {}'.format(model_package_arn))
-
-
選項 2:建立模型並設定
ContainerConfig
欄位如果您想要啟動推論建議任務,而不需要在模型註冊表中註冊模型,請使用此選項。在下列步驟中,您可以在 中建立模型, SageMaker 並將
ContainerConfig
欄位設定為建議任務的輸入。-
建立模型
使用 建立模型
CreateModel
API。如需在將模型部署至 SageMaker 託管時呼叫此方法的範例,請參閱建立模型 (AWS SDK for Python (Boto3))。在上一個步驟中,我們下載了預先訓練的 ResNet18 模型,並將其存放在名為 的目錄中的 Amazon S3 儲存貯體中
models
。我們擷取了 PyTorch (v1.7.1) 深度學習容器推論映像,並將 存放在名為 的變數URI中。image_uri
我們在下列程式碼範例中使用這些變數,其中定義了用作CreateModel
輸入的字典API。model_name = '
<name_of_the_model>
' # Role to give SageMaker permission to access AWS services. sagemaker_role= "arn:aws:iam::<region>
:<account>
:role/*" # Provide the Amazon S3 URI of your compressed tarfile # so that Model Registry knows where to find your model artifacts bucket_prefix='models' bucket = '<your-bucket-name>
' # Provide the name of your S3 bucket model_s3_key = f"{bucket_prefix}/test.tar.gz" model_url= f"s3://{bucket}/{model_s3_key}" #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': image_uri, 'ModelDataUrl': model_url, }) -
設定
ContainerConfig
欄位接下來,您必須使用您剛建立的模型來設定 ContainerConfig 欄位,並在其中指定下列參數:
-
Domain
:模型的機器學習網域及其元件,例如電腦視覺或自然語言處理。 -
Task
:模型完成的機器學習任務,例如影像分類或物件偵測。 -
PayloadConfig
:建議任務的承載組態。如需有關子欄位的詳細資訊,請參閱RecommendationJobPayloadConfig
。 -
Framework
:容器映像的機器學習架構,例如 PyTorch。 -
FrameworkVersion
:容器映像的架構版本。 -
(選用)
SupportedInstanceTypes
:用於即時產生推論的執行個體類型清單。
如果您使用
SupportedInstanceTypes
參數,Inference Recommender 會在Default
任務期間限制執行個體類型的搜尋空間。如有預算限制,或知道有一組特定的執行個體類型可支援您的模型和容器映像檔,請使用此參數。在下列程式碼範例中,我們使用先前定義的參數以及
NearestModelName
來定義用來輸入CreateInferenceRecommendationsJob
的字典API。## Uncomment if you did not store the domain and task in a previous step #ml_domain = 'COMPUTER_VISION' #ml_task = 'IMAGE_CLASSIFICATION' ## Uncomment if you did not store the framework and framework version in a previous step #framework = 'PYTORCH' #framework_version = '1.7.1' # The name of the ML model as standardized by common model zoos nearest_model_name = 'resnet18' # The supported MIME types for input and output data. In this example, # we are using images as input input_content_type='image/jpeg' # Optional: Used for optimizing your model using SageMaker Neo # PyTorch uses NCHW format for images data_input_configuration = "[[1,3,256,256]]" # Create a dictionary to use as input for creating an inference recommendation job container_config = { "Domain": ml_domain, "Framework": framework.upper(), "FrameworkVersion": framework_version, "NearestModelName": nearest_model_name, "PayloadConfig": { "SamplePayloadUrl": sample_payload_url, "SupportedContentTypes": [ input_content_type ] }, "DataInputConfig": data_input_configuration "Task": ml_task, }
-
-