本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
執行批次推論任務
批次推論 (也稱為離線推論) 會根據觀察批次產生模型預測。對於大型資料集來說,或者如果您不需要立即回應模型預測請求,批次推論是不錯的選擇。相反地,線上推論 (即時推論) 可即時產生預測。您可以使用 SageMaker Python SDK、Autopilot 使用者介面 (UI)、AWS 適用於 Python 的 SDK (boto3) 或 AWS Command Line Interface (),從 Autopilot 模型進行批次推論AWS CLI。
下列索引索引標籤顯示三個部署模型的選項:使用 API、Autopilot 使用者介面,或使用 API 從不同帳戶進行部署。這些指示假設您已在 Autopilot 中建立模型。如果您沒有模型,則請參閱使用 AutoML API 建立表格式資料的迴歸或分類任務。若要查看每個選項的範例,請開啟每個索引標籤。
Autopilot 使用者介面包含實用的下拉式功能表、切換、工具提示等,可協助您完成模型部署。
下列步驟顯示如何部署 Autopilot 實驗的模型進行批次預測。
-
在 https://console.aws.amazon.com/sagemaker/ 登入,然後從導覽窗格選取 Studio。
-
在左側導覽窗格上,選擇 Studio。
-
在開始使用下,選取您要在其中啟動 Studio 應用程式的網域。如果您的使用者設定檔只屬於一個網域,您將看不到選取網域的選項。
-
選取您要啟動 Studio Classic 應用程式的使用者設定檔。如果網域中沒有使用者設定檔,請選擇建立使用者設定檔。如需詳細資訊,請參閱新增使用者設定檔。
-
選擇啟動 Studio。如果使用者設定檔屬於共用空間,請選擇開放空間。
-
當 SageMaker Studio Classic 主控台開啟時,選擇啟動 SageMaker AI Studio 按鈕。
-
從左側導覽窗格選取 AutoML。
-
在名稱下,選取與您要部署之模型對應的 Autopilot 實驗。隨即會開啟新的 Autopilot 任務索引標籤。
-
在模型名稱區段中,選取您要部署的模型。
-
選擇部署模型。隨即開啟新索引索引標籤。
-
選擇頁面最上方的進行批次預測。
-
針對批次轉換工作組態,請輸入執行個體類型、執行個體計數和其他選用資訊。
-
在輸入資料組態區段中,開啟下拉式功能表。
-
針對 S3 資料類型,請選擇 ManifestFile 或 S3Prefix。
-
針對分割類型,請選擇線、RecordIO、TFRecord 或無。
-
針對壓縮,請選擇 GZIP 或無。
-
針對 S3 位置,請輸入輸入資料的 Amazon S3 儲存貯體位置和其他選用資訊。
-
在輸出資料組態下,請輸入輸出資料的 S3 儲存貯體,然後選擇組合任務輸出的方式。
-
針對其他組態 (選用),您可以輸入 MIME 類型和 S3 加密金鑰。
-
針對輸入/輸出篩選和資料聯結 (選用),您可以輸入 JSONPath 運算式篩選輸入資料、將輸入來源資料與輸出資料聯結,然後輸入 JSONPath 運算式篩選輸出資料。
-
若要對輸入資料集執行批次預測,請選取建立批次轉換任務。新的批次轉換任務索引標籤隨即出現。
-
在批次轉換任務索引標籤:在狀態區段尋找任務的名稱。然後檢查任務的進度。
若要使用 SageMaker API 進行批次推論,有三個步驟:
-
取得候選定義
來自 InferenceContainers 的候選定義用於建立 SageMaker AI 模型。
下列範例顯示如何使用 DescribeAutoMLJob API 取得最佳模型候選項目的候選定義。請參閱下列 AWS CLI 命令做為範例。
aws sagemaker describe-auto-ml-job --auto-ml-job-name <job-name>
--region <region>
使用 ListCandidatesForAutoMLJob API 列出所有候選項目。請參閱 AWS CLI 命令作為範例。
aws sagemaker list-candidates-for-auto-ml-job --auto-ml-job-name <job-name>
--region <region>
-
建立 SageMaker AI 模型
若要使用 CreateModel API 建立 SageMaker AI 模型,請使用先前步驟中的容器定義。請參閱 AWS CLI
命令作為範例。
aws sagemaker create-model --model-name '<your-custom-model-name>
' \
--containers ['<container-definition1
>, <container-definition2>
, <container-definition3>
]' \
--execution-role-arn '<execution-role-arn>
' --region '<region>
-
建立 SageMaker AI 轉換任務
下列範例使用 CreateTransformJob API 建立 SageMaker AI 轉換任務。請參閱下列 AWS CLI 命令做為範例。
aws sagemaker create-transform-job --transform-job-name '<your-custom-transform-job-name>
' --model-name '<your-custom-model-name-from-last-step>
'\
--transform-input '{
"DataSource": {
"S3DataSource": {
"S3DataType": "S3Prefix",
"S3Uri": "<your-input-data>
"
}
},
"ContentType": "text/csv
",
"SplitType": "Line"
}'\
--transform-output '{
"S3OutputPath": "<your-output-path>
",
"AssembleWith": "Line"
}'\
--transform-resources '{
"InstanceType": "<instance-type>
",
"InstanceCount": 1
}' --region '<region>
'
使用 DescribeTransformJob API 檢查轉換任務的進度。請參閱下列 AWS CLI 命令做為範例。
aws sagemaker describe-transform-job --transform-job-name '<your-custom-transform-job-name>
' --region <region>
任務完成後,<your-output-path>
會提供預測的結果。
輸出檔案名稱的格式如下:<input_data_file_name>.out
。例如,如果輸入檔案是 text_x.csv
,則輸出名稱將是 text_x.csv.out
。
下列索引標籤顯示 SageMaker Python SDK、 AWS SDK for Python (boto3) 和 的程式碼範例 AWS CLI。
- SageMaker Python SDK
-
下列範例使用 SageMaker Python SDK 進行批次預測。
from sagemaker import AutoML
sagemaker_session= sagemaker.session.Session()
job_name = 'test-auto-ml-job
' # your autopilot job name
automl = AutoML.attach(auto_ml_job_name=job_name)
output_path = 's3://test-auto-ml-job/output
'
input_data = 's3://test-auto-ml-job/test_X.csv
'
# call DescribeAutoMLJob API to get the best candidate definition
best_candidate = automl.describe_auto_ml_job()['BestCandidate']
best_candidate_name = best_candidate['CandidateName']
# create model
model = automl.create_model(name=best_candidate_name,
candidate=best_candidate)
# create transformer
transformer = model.transformer(instance_count=1
,
instance_type='ml.m5.2xlarge
',
assemble_with='Line',
output_path=output_path)
# do batch transform
transformer.transform(data=input_data,
split_type='Line',
content_type='text/csv
',
wait=True)
- AWS SDK for Python (boto3)
-
下列範例使用適用於 Python 的AWS SDK (boto3) 進行批次預測。
import sagemaker
import boto3
session = sagemaker.session.Session()
sm_client = boto3.client('sagemaker', region_name='us-west-2
')
role = 'arn:aws:iam::1234567890:role/sagemaker-execution-role
'
output_path = 's3://test-auto-ml-job/output
'
input_data = 's3://test-auto-ml-job/test_X.csv
'
best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName=job_name)['BestCandidate']
best_candidate_containers = best_candidate['InferenceContainers']
best_candidate_name = best_candidate['CandidateName']
# create model
reponse = sm_client.create_model(
ModelName = best_candidate_name,
ExecutionRoleArn = role,
Containers = best_candidate_containers
)
# Lauch Transform Job
response = sm_client.create_transform_job(
TransformJobName=f'{best_candidate_name}-transform-job',
ModelName=model_name,
TransformInput={
'DataSource': {
'S3DataSource': {
'S3DataType': 'S3Prefix',
'S3Uri': input_data
}
},
'ContentType': "text/csv
",
'SplitType': 'Line'
},
TransformOutput={
'S3OutputPath': output_path,
'AssembleWith': 'Line',
},
TransformResources={
'InstanceType': 'ml.m5.2xlarge
',
'InstanceCount': 1
,
},
)
批次推論任務以下列格式傳回回應。
{'TransformJobArn': 'arn:aws:sagemaker:us-west-2:1234567890:transform-job/test-transform-job
',
'ResponseMetadata': {'RequestId': '659f97fc-28c4-440b-b957-a49733f7c2f2',
'HTTPStatusCode': 200,
'HTTPHeaders': {'x-amzn-requestid': '659f97fc-28c4-440b-b957-a49733f7c2f2',
'content-type': 'application/x-amz-json-1.1',
'content-length': '96',
'date': 'Thu, 11 Aug 2022 22:23:49 GMT'},
'RetryAttempts': 0}}
- AWS Command Line Interface (AWS CLI)
-
-
使用下列程式碼範例取得候選定義。
aws sagemaker describe-auto-ml-job --auto-ml-job-name 'test-automl-job
' --region us-west-2
-
使用下列程式碼範例建立模型。
aws sagemaker create-model --model-name 'test-sagemaker-model
'
--containers '[{
"Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3",
"ModelDataUrl": "s3://amzn-s3-demo-bucket/out/test-job1/data-processor-models/test-job1-dpp0-1-e569ff7ad77f4e55a7e549a/output/model.tar.gz
",
"Environment": {
"AUTOML_SPARSE_ENCODE_RECORDIO_PROTOBUF": "1",
"AUTOML_TRANSFORM_MODE": "feature-transform",
"SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "application/x-recordio-protobuf",
"SAGEMAKER_PROGRAM": "sagemaker_serve",
"SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code"
}
}, {
"Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-xgboost:1.3-1-cpu-py3",
"ModelDataUrl": "s3://amzn-s3-demo-bucket/out/test-job1/tuning/flicdf10v2-dpp0-xgb/test-job1E9-244-7490a1c0/output/model.tar.gz
",
"Environment": {
"MAX_CONTENT_LENGTH": "20971520",
"SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv",
"SAGEMAKER_INFERENCE_OUTPUT": "predicted_label",
"SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,probabilities"
}
}, {
"Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3",
"ModelDataUrl": "s3://amzn-s3-demo-bucket/out/test-job1/data-processor-models/test-job1-dpp0-1-e569ff7ad77f4e55a7e549a/output/model.tar.gz
",
"Environment": {
"AUTOML_TRANSFORM_MODE": "inverse-label-transform",
"SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv",
"SAGEMAKER_INFERENCE_INPUT": "predicted_label",
"SAGEMAKER_INFERENCE_OUTPUT": "predicted_label",
"SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,labels,probabilities",
"SAGEMAKER_PROGRAM": "sagemaker_serve",
"SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code"
}
}]' \
--execution-role-arn 'arn:aws:iam::1234567890:role/sagemaker-execution-role
' \
--region 'us-west-2
'
-
使用下列程式碼範例建立轉換任務。
aws sagemaker create-transform-job --transform-job-name 'test-tranform-job
'\
--model-name 'test-sagemaker-model
'\
--transform-input '{
"DataSource": {
"S3DataSource": {
"S3DataType": "S3Prefix",
"S3Uri": "s3://amzn-s3-demo-bucket/data.csv
"
}
},
"ContentType": "text/csv
",
"SplitType": "Line"
}'\
--transform-output '{
"S3OutputPath": "s3://amzn-s3-demo-bucket/output/
",
"AssembleWith": "Line"
}'\
--transform-resources '{
"InstanceType": "ml.m5.2xlarge
",
"InstanceCount": 1
}'\
--region 'us-west-2
'
-
使用下列程式碼範例檢查轉換任務進度。
aws sagemaker describe-transform-job --transform-job-name 'test-tranform-job
' --region us-west-2
以下是轉換任務的回應。
{
"TransformJobName": "test-tranform-job
",
"TransformJobArn": "arn:aws:sagemaker:us-west-2:1234567890:transform-job/test-tranform-job
",
"TransformJobStatus": "InProgress",
"ModelName": "test-model
",
"TransformInput": {
"DataSource": {
"S3DataSource": {
"S3DataType": "S3Prefix",
"S3Uri": "s3://amzn-s3-demo-bucket/data.csv
"
}
},
"ContentType": "text/csv
",
"CompressionType": "None",
"SplitType": "Line"
},
"TransformOutput": {
"S3OutputPath": "s3://amzn-s3-demo-bucket/output/
",
"AssembleWith": "Line",
"KmsKeyId": ""
},
"TransformResources": {
"InstanceType": "ml.m5.2xlarge
",
"InstanceCount": 1
},
"CreationTime": 1662495635.679,
"TransformStartTime": 1662495847.496,
"DataProcessing": {
"InputFilter": "$",
"OutputFilter": "$",
"JoinSource": "None"
}
}
TransformJobStatus
變更為 Completed
之後,您可以在 S3OutputPath
檢查推論結果。
若要在與產生模型之帳戶不同的帳戶中建立批次推論任務,請遵循從不同帳戶部署模型中的指示。然後,您可以遵循 使用 SageMaker API 進行部署 建立模型與轉換任務。