

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

# 使用 `ModelBuilder` 部署 MLflow 模型
<a name="mlflow-track-experiments-model-deployment"></a>

您可以使用 Amazon SageMaker AI Model Builder 將 MLflow 模型部署至 SageMaker AI 端點。如需 Amazon SageMaker AI Model Builder 的詳細資訊，請參閱[使用 ModelBuilder 在 Amazon SageMaker AI 中建立模型](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-modelbuilder-creation.html)。

`ModelBuilder` 是一種 Python 類別，採用架構模型或使用者指定的推論規格，並將其轉換為可部署模型。如需 `ModelBuilder` 類別的詳細資訊，請參閱 [ModelBuilder](https://sagemaker.readthedocs.io/en/stable/api/inference/model_builder.html#sagemaker.serve.builder.model_builder.ModelBuilder)。

若要使用 `ModelBuilder` 部署 MLflow 模型，請在 `model_metadata["MLFLOW_MODEL_PATH"]` 屬性中提供 MLflow 成品的路徑。如需有效模型路徑輸入格式的詳細資訊，請繼續閱讀：

**注意**  
如果您以 MLflow 執行 ID 或 MLflow 模型註冊庫路徑的形式提供模型成品路徑，則您還必須透過 `model_metadata["MLFLOW_TRACKING_ARN"]` 屬性指定追蹤伺服器 ARN。
+ [在 `model_metadata` 中需要 ARN 的模型路徑](#mlflow-track-experiments-model-deployment-with-arn)
+ [在 `model_metadata` 中不需要 ARN 的模型路徑](#mlflow-track-experiments-model-deployment-without-arn)

## 在 `model_metadata` 中需要 ARN 的模型路徑
<a name="mlflow-track-experiments-model-deployment-with-arn"></a>

下列模型路徑確實需要您在部署的 `model_metadata` 中指定 ARN：
+ MLflow [執行 ID](https://mlflow.org/docs/latest/python_api/mlflow.entities.html?highlight=mlflow%20info#mlflow.entities.RunInfo.run_id)：`runs:/aloy-run-id/run-relative/path/to/model`
+ MLflow [模型註冊庫路徑](https://mlflow.org/docs/latest/model-registry.html#find-registered-models)：`models:/model-name/model-version`

## 在 `model_metadata` 中不需要 ARN 的模型路徑
<a name="mlflow-track-experiments-model-deployment-without-arn"></a>

下列模型路徑不需要您在部署的 `model_metadata` 中指定 ARN：
+ 本機模型路徑：`/Users/me/path/to/local/model`
+ Amazon S3 模型路徑：`s3://amzn-s3-demo-bucket/path/to/model`
+ 模型套件 ARN：`arn:aws:sagemaker:region:account-id:mlflow-tracking-server/tracking-server-name`

如需 MLflow 模型部署如何與 Amazon SageMaker AI 搭配使用的詳細資訊，請參閱 MLflow 文件中的[將 MLflow 模型部署到 Amazon SageMaker AI](https://mlflow.org/docs/latest/deployment/deploy-model-to-sagemaker.html)。

如果使用 Amazon S3 路徑，您可以使用下列命令找到已註冊模型的路徑：

```
registered_model = client.get_registered_model(name='AutoRegisteredModel')
source_path = registered_model.latest_versions[0].source
```

以下範例概述如何使用 `ModelBuilder` 和 MLflow 模型註冊庫路徑部署 MLflow 模型。由於此範例以 MLflow 模型註冊庫路徑的形式提供模型成品路徑，因此對 `ModelBuilder` 的呼叫也必須透過 `model_metadata["MLFLOW_TRACKING_ARN"]` 屬性指定追蹤伺服器 ARN。

**重要**  
您必須使用 [2.224.0](https://pypi.org/project/sagemaker/2.224.0/) 版或更新版本的 SageMaker Python SDK，才能使用 `ModelBuilder`。

**注意**  
使用下列程式碼範例做為參考。如需示範如何部署已註冊 MLflow 模型的end-to-end範例，請參閱 [使用範例 Jupyter 筆記本的 MLflow 教學課程](mlflow-tutorials.md)。

```
from sagemaker.serve import ModelBuilder
from sagemaker.serve.mode.function_pointers import Mode
from sagemaker.serve import SchemaBuilder

my_schema = SchemaBuilder(
    sample_input=sample_input, 
    sample_output=sample_output
)

model_builder = ModelBuilder(
    mode=Mode.SAGEMAKER_ENDPOINT,
    schema_builder=my_schema,
    role_arn="Your-service-role-ARN",
    model_metadata={
        # both model path and tracking server ARN are required if you use an mlflow run ID or mlflow model registry path as input
        "MLFLOW_MODEL_PATH": "models:/sklearn-model/1"
        "MLFLOW_TRACKING_ARN": "arn:aws:sagemaker:region:account-id:mlflow-tracking-server/tracking-server-name"
    }
)
model = model_builder.build()
predictor = model.deploy( initial_instance_count=1, instance_type="ml.c6i.xlarge" )
```

若要維持使用 `ModelBuilder` 部署 MLflow 模型的[歷程追蹤](https://docs.aws.amazon.com/sagemaker/latest/dg/lineage-tracking.html)，您必須具有下列 IAM 許可：
+ `sagemaker:CreateArtifact`
+ `sagemaker:ListArtifacts`
+ `sagemaker:AddAssociation`
+ `sagemaker:DescribeMLflowTrackingServer`

**重要**  
歷程追蹤是選用的。部署成功，無需與歷程追蹤相關的許可。如果您未設定許可，您會在呼叫 `model.deploy()` 時看到歷程追蹤許可錯誤。不過，端點部署仍可成功，您可以直接與模型端點互動。如果已設定上述許可，則會自動建立並儲存歷程追蹤資訊。

如需詳細資訊和端對端範例，請參閱[使用範例 Jupyter 筆記本的 MLflow 教學課程](mlflow-tutorials.md)。