本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon 中的推論管道將預處理邏輯部署到單一端點中的 ML 模型 SageMaker
創建者莫罕·戈瓦達普魯肖塔瑪(AWS),加布里埃爾·羅德里格斯·加西亞(AWS)和馬特烏斯扎倫巴(AWS)
環境:生產 | 技術:機器學習與人工智慧、容器與微服務 | AWS 服務:Amazon SageMaker;Amazon ECR |
Summary
此模式說明如何使用 Amazon SageMaker 中的推論管道在單一端點中部署多個管道模型物件。管線模型物件代表不同的機器學習 (ML) 工作流程階段,例如前置處理、模型推論和後處理。為了說明序列連接的管線模型物件的部署,此模式會示範如何部署以內建的線性學習器演算法為基礎的 SciKit-learn 容器和回歸模型。 SageMaker部署託管在中的單一端點後面 SageMaker。
注意:此病毒碼中的部署會使用 ml.m4.2xlarge 執行個體類型。我們建議使用符合您資料大小需求和工作流程複雜性的執行個體類型。如需詳細資訊,請參閱 Amazon SageMaker 定價。此模式使用預先建置的 Docker 映像檔進行 Scikit 學習,但您可以使用自己的 Docker 容器,並將它們整合到您的工作流程中。
先決條件和限制
先決條件
產品版本
架構
目標技術堆疊
Amazon Elastic Container Registry (Amazon ECR)
Amazon SageMaker
Amazon SageMaker 一室
Amazon Simple Storage Service (Amazon S3)
適用於 Amazon 的即時推論端點 SageMaker
目標架構
下圖顯示 Amazon SageMaker 管道模型物件部署的架構。
該圖顯示以下工作流程:
SageMaker 筆記型電腦會部署管線模型。
S3 儲存貯體存放模型成品。
Amazon ECR 從 S3 存儲桶獲取源容器映像。
AWS 工具
Code
此模式的代碼可在具有 Scikit 學習和線 GitHub 性學習器存放庫的推論管道中找到。
史诗
任務 | 描述 | 所需技能 |
---|
為您的回歸工作準備資料集。 | 在 Amazon SageMaker 工作室打開筆記本。 若要匯入所有必要的程式庫並初始化您的工作環境,請在筆記本中使用下列範例程式碼: import sagemaker
from sagemaker import get_execution_role
sagemaker_session = sagemaker.Session()
# Get a SageMaker-compatible role used by this Notebook Instance.
role = get_execution_role()
# S3 prefix
bucket = sagemaker_session.default_bucket()
prefix = "Scikit-LinearLearner-pipeline-abalone-example"
若要下載範例資料集,請將下列程式碼新增至您的記事本: ! mkdir abalone_data
! aws s3 cp s3://sagemaker-sample-files/datasets/tabular/uci_abalone/abalone.csv ./abalone_data
注意:此模式中的範例使用 UCI Machine Learning 儲存庫中的鮑魚資料集。 | 資料科學家 |
將資料集上傳到 S3 儲存貯體。 | 在您先前準備好資料集的筆記本中,新增下列程式碼,將範例資料上傳至 S3 儲存貯體: WORK_DIRECTORY = "abalone_data"
train_input = sagemaker_session.upload_data(
path="{}/{}".format(WORK_DIRECTORY, "abalone.csv"),
bucket=bucket,
key_prefix="{}/{}".format(prefix, "train"),
)
| 資料科學家 |
任務 | 描述 | 所需技能 |
---|
準備 preprocessor.py 指令碼。 | 從 GitHub sklearn_abalone_featurizer.py 存儲庫中的 Python 文件複製預處理邏輯,然後將代碼粘貼到一個名為sklearn_abalone_featurizer.py 的單獨 Python 文件中。您可以修改程式碼以符合自訂資料集和自訂工作流程。 將sklearn_abalone_featurizer.py 檔案儲存在專案的根目錄中 (亦即,在執行 SageMaker 筆記本的相同位置)。
| 資料科學家 |
創建 SKLearn 預處理器對象。 | 若要建立可併入最終推論管道的 SKLearn 預處理器物件 (稱為 SKLearn 估算器),請在筆記本中執行下列程式碼: SageMaker from sagemaker.sklearn.estimator import SKLearn
FRAMEWORK_VERSION = "0.23-1"
script_path = "sklearn_abalone_featurizer.py"
sklearn_preprocessor = SKLearn(
entry_point=script_path,
role=role,
framework_version=FRAMEWORK_VERSION,
instance_type="ml.c4.xlarge",
sagemaker_session=sagemaker_session,
)
sklearn_preprocessor.fit({"train": train_input})
| 資料科學家 |
測試預處理器的推論。 | 若要確認您的預處理器已正確定義,請在 SageMaker 筆記本中輸入下列程式碼,以啟動批次轉換工作: # Define a SKLearn Transformer from the trained SKLearn Estimator
transformer = sklearn_preprocessor.transformer(
instance_count=1, instance_type="ml.m5.xlarge", assemble_with="Line", accept="text/csv"
)
# Preprocess training input
transformer.transform(train_input, content_type="text/csv")
print("Waiting for transform job: " + transformer.latest_transform_job.job_name)
transformer.wait()
preprocessed_train = transformer.output_path
| |
任務 | 描述 | 所需技能 |
---|
創建一個模型對象。 | 若要根據線性學員演算法建立模型物件,請在 SageMaker 記事本中輸入下列程式碼: import boto3
from sagemaker.image_uris import retrieve
ll_image = retrieve("linear-learner", boto3.Session().region_name)
s3_ll_output_key_prefix = "ll_training_output"
s3_ll_output_location = "s3://{}/{}/{}/{}".format(
bucket, prefix, s3_ll_output_key_prefix, "ll_model"
)
ll_estimator = sagemaker.estimator.Estimator(
ll_image,
role,
instance_count=1,
instance_type="ml.m4.2xlarge",
volume_size=20,
max_run=3600,
input_mode="File",
output_path=s3_ll_output_location,
sagemaker_session=sagemaker_session,
)
ll_estimator.set_hyperparameters(feature_dim=10, predictor_type="regressor", mini_batch_size=32)
ll_train_data = sagemaker.inputs.TrainingInput(
preprocessed_train,
distribution="FullyReplicated",
content_type="text/csv",
s3_data_type="S3Prefix",
)
data_channels = {"train": ll_train_data}
ll_estimator.fit(inputs=data_channels, logs=True)
上述程式碼會從公用 Amazon ECR 登錄擷取模型的相關 Amazon ECR Docker 映像,建立估算器物件,然後使用該物件來訓練回歸模型。 | 資料科學家 |
任務 | 描述 | 所需技能 |
---|
部署管線模型。 | 若要建立管線模型物件 (也就是預處理器物件) 並部署物件,請在 SageMaker 筆記本中輸入下列程式碼: from sagemaker.model import Model
from sagemaker.pipeline import PipelineModel
import boto3
from time import gmtime, strftime
timestamp_prefix = strftime("%Y-%m-%d-%H-%M-%S", gmtime())
scikit_learn_inferencee_model = sklearn_preprocessor.create_model()
linear_learner_model = ll_estimator.create_model()
model_name = "inference-pipeline-" + timestamp_prefix
endpoint_name = "inference-pipeline-ep-" + timestamp_prefix
sm_model = PipelineModel(
name=model_name, role=role, models= [scikit_learn_inferencee_model, linear_learner_model]
)
sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge", endpoint_name=endpoint_name)
注意:您可以調整模型物件中使用的例證類型,以符合您的需求。 | 資料科學家 |
測試推論。 | 若要確認端點是否正常運作,請在 SageMaker 筆記本中執行下列範例推論程式碼: from sagemaker.predictor import Predictor
from sagemaker.serializers import CSVSerializer
payload = "M, 0.44, 0.365, 0.125, 0.516, 0.2155, 0.114, 0.155"
actual_rings = 10
predictor = Predictor(
endpoint_name=endpoint_name, sagemaker_session=sagemaker_session, serializer=CSVSerializer()
)
print(predictor.predict(payload))
| 資料科學家 |
相關資源