

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

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

您可以使用 SageMaker Amazon AI 模型生成器将 mlFlow 模型部署到 SageMaker 人工智能终端节点。有关 Amazon A SageMaker I 模型生成器的更多信息，请参阅[使用在 Amazon A SageMaker I 中创建模型 ModelBuilder](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。
+ [`在模型元数据中需要 ARN 的模型路径`](#mlflow-track-experiments-model-deployment-with-arn)
+ [`在模型元数据中不需要 ARN 的模型路径`](#mlflow-track-experiments-model-deployment-without-arn)

## `在模型元数据中需要 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}}`

## `在模型元数据中不需要 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 模型部署如何与亚马逊 A SageMaker I 配合使用的更多信息，请参阅 mlFlo [w 文档中的将 mlFlow 模型部署到亚马逊 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。

**重要**  
你必须使用 Pyth SageMaker on 软件开发工具包 [2.224.0](https://pypi.org/project/sagemaker/2.224.0/) 或更高版本才能使用。`ModelBuilder`

**注意**  
请参考以下代码示例。有关如何部署已注册 MLflow 模型的端到端示例，请参阅 [使用 Jupyter Notebook 示例的 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 Notebook 示例的 MLflow 教程](mlflow-tutorials.md)。