

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

# MLflow 追踪服务器
<a name="mlflow-create-tracking-server"></a>

[MLflow 跟踪服务器](https://mlflow.org/docs/latest/tracking.html#mlflow-tracking-server-optional)是一个独立的 HTTP 服务器，它为多个 REST API 端点提供服务，用于跟踪运行和实验。需要跟踪服务器才能开始使用 SageMaker 人工智能和跟踪您的机器学习 (ML) 实验 MLflow。您可以通过 Studio 用户界面创建跟踪服务器，也可以通过创建更精细的安全自定义。 AWS CLI 

您必须配置正确的 IAM 权限才能创建 MLflow 跟踪服务器。

**Topics**
+ [为设置 IAM 权限 MLflow](mlflow-create-tracking-server-iam.md)
+ [使用 Studio 创建跟踪服务器](mlflow-create-tracking-server-studio.md)
+ [使用创建跟踪服务器 AWS CLI](mlflow-create-tracking-server-cli.md)

# 为设置 IAM 权限 MLflow
<a name="mlflow-create-tracking-server-iam"></a>

要开始使用 Amazon A SageMaker I，您必须配置必要的 I MLflow AM 服务角色。

如果您创建了一个新的 Amazon SageMaker AI 域来访问您在 Studio 中的实验，则可以在域名设置期间配置必要的 IAM 权限。有关更多信息，请参阅 [在创建新域时设置 MLflow IAM 权限](#mlflow-create-tracking-server-iam-role-manager)。

要使用 IAM 管理控制台设置权限，请参阅 [在 IAM 管理控制台中创建必要的 IAM 服务角色](#mlflow-create-tracking-server-iam-service-roles)。

您必须为 `sagemaker-mlflow` 操作配置授权控制。您可以选择定义更精细的授权控制来管理特定于操作 MLflow的权限。有关更多信息，请参阅 [创建针对特定操作的授权控制](#mlflow-create-tracking-server-update-iam-actions)。

## 在创建新域时设置 MLflow IAM 权限
<a name="mlflow-create-tracking-server-iam-role-manager"></a>

在为您的组织设置新的 SageMaker Amazon AI 域时，您可以通过**用户和机器学习活动**设置为您的域服务角色配置 IAM 权限。

**在设置新域时配置 IAM 权限以便 MLflow 与 SageMaker AI 配合使用**

1. 使用 SageMaker AI 控制台设置新域。在**设置 SageMaker AI 域**页面上，选择**为组织设置**。有关更多信息，请参阅 [使用管理控制台进行自定义设置](onboard-custom.md#onboard-custom-instructions-console)。

1. 设置**用户和机器学习活动**时，请从以下机器学习活动中进行选择 MLflow：**使用 MLflow**、**管理 MLflow 跟踪服务器**和** AWS 服务所需的访问权限 MLflow**。有关这些活动的更多信息，请参阅本步骤后面的说明。

1. 完成新域的设置和创建。

Amazon SageMaker 角色管理器中提供了以下 MLflow 机器学习活动：
+ **使用 MLflow**：此 ML 活动授予域服务角色调用 MLflow REST 的权限，以便 APIs 在中管理实验、运行和模型 MLflow。
+ **管理 MLflow 跟踪服务器**：此 ML 活动向域服务角色授予创建、更新、启动、停止和删除跟踪服务器的权限。
+ **需要访问以下 AWS 服务的**权限 MLflow：此机器学习活动提供访问 Amazon S3 和 A SageMaker I 模型注册表所需的域服务角色权限。这样就可以将域服务角色用作跟踪服务器服务角色。

有关角色管理器中 ML 活动的更多信息，请参阅 [机器学习活动参考](role-manager-ml-activities.md)。

## 在 IAM 管理控制台中创建必要的 IAM 服务角色
<a name="mlflow-create-tracking-server-iam-service-roles"></a>

如果您没有创建或更新您的域名服务角色，则必须在 IAM 控制台中创建以下服务角色才能创建和使用 MLflow 跟踪服务器：
+ 跟踪服务器可用来访问 A SageMaker I 资源的跟踪服务器 IAM 服务角色
+ A SageMaker I IAM 服务角色， SageMaker AI 可用来创建和管理 MLflow 资源

### 跟踪服务器 IAM 服务角色的 IAM 策略
<a name="mlflow-create-tracking-server-iam-service-roles-ts"></a>

跟踪服务器使用跟踪服务器 IAM 服务角色来访问其所需的资源，例如 Amazon S3 和 SageMaker 模型注册表。

创建跟踪服务器 IAM 服务角色时，请使用以下 IAM 信任策略：

------
#### [ JSON ]

****  

```
{
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
             "Effect": "Allow",
             "Principal": {
                 "Service": [                     
                      "sagemaker.amazonaws.com"
                 ]
             },
             "Action": "sts:AssumeRole"
         }
     ]
 }
```

------

在 IAM 管理控制台中，为跟踪服务器服务角色添加以下权限策略：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:Put*",
                "s3:List*",
                "sagemaker:AddTags",
                "sagemaker:CreateModelPackageGroup",
                "sagemaker:CreateModelPackage",
                "sagemaker:UpdateModelPackage",
                "sagemaker:DescribeModelPackageGroup"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### A SageMaker I IAM 服务角色的 IAM 策略
<a name="mlflow-create-tracking-server-iam-service-roles-sm"></a>

A SageMaker I 服务角色由访问 MLflow 跟踪服务器的客户端使用，需要调用 MLflow REST 的权限 APIs。 SageMaker AI 服务角色还需要 SageMaker API 权限才能创建、查看、更新、启动、停止和删除跟踪服务器。

您可以创建新角色或更新现有角色。A SageMaker I 服务角色需要以下策略：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	     
    "Statement": [        
        {            
            "Effect": "Allow",            
            "Action": [
                "sagemaker-mlflow:*",
                "sagemaker:CreateMlflowTrackingServer",
                "sagemaker:ListMlflowTrackingServers",
                "sagemaker:UpdateMlflowTrackingServer",
                "sagemaker:DeleteMlflowTrackingServer",
                "sagemaker:StartMlflowTrackingServer",
                "sagemaker:StopMlflowTrackingServer",
                "sagemaker:CreatePresignedMlflowTrackingServerUrl"
            ],            
            "Resource": "*"        
        }        
    ]
}
```

------

## 创建针对特定操作的授权控制
<a name="mlflow-create-tracking-server-update-iam-actions"></a>

您必须为其设置授权控制`sagemaker-mlflow`，并且可以选择配置特定于操作的授权控制，以管理您的用户在 MLflow 跟踪服务器上拥有的更精细的 MLflow权限。

**注意**  
以下步骤假设您的 MLflow 跟踪服务器的 ARN 已经可用。要了解如何创建跟踪服务器，请参阅 [使用 Studio 创建跟踪服务器](mlflow-create-tracking-server-studio.md) 或 [使用创建跟踪服务器 AWS CLI](mlflow-create-tracking-server-cli.md)。

以下命令创建一个名为的文件`mlflow-policy.json`，该文件为您的跟踪服务器提供所有可用 A SageMaker I MLflow 操作的 IAM 权限。通过选择希望用户执行的特定操作，可以有选择地限制用户的权限。有关可用操作的列表，请参阅[支持的 IAM 操作 MLflow](#mlflow-create-tracking-server-iam-actions)。

```
# Replace "Resource":"*" with "Resource":"TrackingServerArn" 
# Replace "sagemaker-mlflow:*" with specific actions

printf '{
    "Version": "2012-10-17",		 	 	     
    "Statement": [        
        {            
            "Effect": "Allow",            
            "Action": "sagemaker-mlflow:*",            
            "Resource": "*"        
        }        
    ]
}' > mlflow-policy.json
```

使用 `mlflow-policy.json` 文件通过 AWS CLI创建 IAM 策略。

```
aws iam create-policy \
  --policy-name MLflowPolicy \
  --policy-document file://mlflow-policy.json
```

找回账户 ID 并将策略附加到您的 IAM 角色。

```
# Get your account ID
aws sts get-caller-identity

# Attach the IAM policy using your exported role and account ID
aws iam attach-role-policy \
  --role-name $role_name \
  --policy-arn arn:aws:iam::123456789012:policy/MLflowPolicy
```

### 支持的 IAM 操作 MLflow
<a name="mlflow-create-tracking-server-iam-actions"></a>

授权访问控制支持以下 SageMaker AI MLflow 操作：
+ sagemaker-mlflow:AccessUI
+ sagemaker-mlflow：CreateExperiment
+ sagemaker-mlflow：SearchExperiments
+ sagemaker-mlflow：GetExperiment
+ sagemaker-mlflow：GetExperimentByName
+ sagemaker-mlflow：DeleteExperiment
+ sagemaker-mlflow：RestoreExperiment
+ sagemaker-mlflow：UpdateExperiment
+ sagemaker-mlflow：CreateRun
+ sagemaker-mlflow：DeleteRun
+ sagemaker-mlflow：RestoreRun
+ sagemaker-mlflow：GetRun
+ sagemaker-mlflow：LogMetric
+ sagemaker-mlflow：LogBatch
+ sagemaker-mlflow：LogModel
+ sagemaker-mlflow：LogInputs
+ sagemaker-mlflow：SetExperimentTag
+ sagemaker-mlflow：SetTag
+ sagemaker-mlflow：DeleteTag
+ sagemaker-mlflow：LogParam
+ sagemaker-mlflow：GetMetricHistory
+ sagemaker-mlflow：SearchRuns
+ sagemaker-mlflow：ListArtifacts
+ sagemaker-mlflow：UpdateRun
+ sagemaker-mlflow：CreateRegisteredModel
+ sagemaker-mlflow：GetRegisteredModel
+ sagemaker-mlflow：RenameRegisteredModel
+ sagemaker-mlflow：UpdateRegisteredModel
+ sagemaker-mlflow：DeleteRegisteredModel
+ sagemaker-mlflow：GetLatestModelVersions
+ sagemaker-mlflow：CreateModelVersion
+ sagemaker-mlflow：GetModelVersion
+ sagemaker-mlflow：UpdateModelVersion
+ sagemaker-mlflow：DeleteModelVersion
+ sagemaker-mlflow：SearchModelVersions
+ sagemaker-mlflow：GetDownloadURIForModelVersionArtifacts
+ sagemaker-mlflow：TransitionModelVersionStage
+ sagemaker-mlflow：SearchRegisteredModels
+ sagemaker-mlflow：SetRegisteredModelTag
+ sagemaker-mlflow：DeleteRegisteredModelTag
+ sagemaker-mlflow：DeleteModelVersionTag
+ sagemaker-mlflow：DeleteRegisteredModelAlias
+ sagemaker-mlflow：SetRegisteredModelAlias
+ sagemaker-mlflow：GetModelVersionByAlias
+ sagemaker-mlflow：FinalizeLoggedModel
+ sagemaker-mlflow：GetLoggedModel
+ sagemaker-mlflow：DeleteLoggedModel
+ sagemaker-mlflow：SearchLoggedModels
+ sagemaker-mlflow：SetLoggedModelTags
+ sagemaker-mlflow：DeleteLoggedModelTag
+ sagemaker-mlflow：ListLoggedModelArtifacts
+ sagemaker-mlflow：LogLoggedModelParams
+ sagemaker-mlflow：LogOutputs

# 使用 Studio 创建跟踪服务器
<a name="mlflow-create-tracking-server-studio"></a>

您可以通过 SageMaker Studio MLflow 用户界面创建跟踪服务器。如果您按照**为组织设置**工作流程创建 SageMaker Studio 域，则您的 SageMaker Studio 域的服务角色具有充当 A SageMaker I IAM 服务角色和跟踪服务器 IAM 服务角色的足够权限。

使用以下步骤从 SageMaker Studio MLflow 用户界面创建跟踪服务器：

1. 从 SageMaker AI 控制台导航到 Studio。请确保您使用的是新的 Studio 体验，并且是从 Studio Classic 升级而来。有关更多信息，请参阅 [从亚马逊 SageMaker Studio 经典版迁移](studio-updated-migrate.md)。

1. **MLflow**在 Studio 用户界面的 “**应用程序**” 窗格中进行选择。

1. **（可选）**如果您尚未创建跟踪服务器或需要创建新服务器，可以选择**创建**。然后为构件存储提供唯一的跟踪服务器名称和 S3 URI，并创建跟踪服务器。您可以选择**配置**，对跟踪服务器进行更精细的自定义。

1. 在 “**MLflow跟踪服务器**” 窗格中选择 “**创建**”。Studio 域 IAM 服务角色用于跟踪服务器 IAM 服务角色。

1. 为跟踪服务器提供一个唯一的名称，并为跟踪服务器构件存储提供一个 Amazon S3 URI。您的跟踪服务器和 Amazon S3 存储桶必须位于**同一个 AWS 区域**中。
**重要**  
当您为项目存储提供 Amazon S3 URI 时，请确保 Amazon S3 存储桶与您的跟踪服务器位于同一 AWS 区域 位置。**不支持跨区域构件存储**。

1. **（可选）**选择**配置**，更改默认设置，如跟踪服务器大小、标签和 IAM 服务角色。

1. 选择**创建**。
**注意**  
完成跟踪服务器创建可能需要 25 分钟。如果创建跟踪服务器的时间超过 25 分钟，请检查您是否拥有必要的 IAM 权限。有关 IAM 权限的更多信息，请参阅 [为设置 IAM 权限 MLflow](mlflow-create-tracking-server-iam.md)。成功创建跟踪服务器后，它会自动启动。

1. 创建跟踪服务器后，您可以启动 MLflow 用户界面。有关更多信息，请参阅 [使用预先指定的 URL 启动 MLflow 用户界面](mlflow-launch-ui.md)。

![\[Studio 用户界面中的创建 MLflow 跟踪服务器提示符。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/mlflow/mlflow-studio-create.png)


# 使用创建跟踪服务器 AWS CLI
<a name="mlflow-create-tracking-server-cli"></a>

您可以使用创建跟踪服务器， AWS CLI 以实现更精细的安全自定义。

## 先决条件
<a name="mlflow-create-tracking-server-cli-prereqs"></a>

要使用创建跟踪服务器 AWS CLI，必须具备以下条件：
+ **可以访问终端。**这可能包括本地 IDE、Amazon EC2 实例或 AWS CloudShell。
+ **可以进入开发环境。**这可能包括 Studio IDEs 或 Studio Classic 中的本地或 Jupyter 笔记本环境。
+ **已配置的 AWS CLI 安装**。有关更多信息，请参阅[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
+ **具有适当权限的 IAM 角色**。以下步骤要求环境具有 `iam:CreateRole`、`iam:CreatePolicy`、`iam:AttachRolePolicy` 和 `iam:ListPolicies` 权限。运行本用户指南中的步骤所使用的角色需要这些权限。本指南中的说明创建了一个用作 MLflow 跟踪服务器执行角色的 IAM 角色，以便它可以访问您的 Amazon S3 存储桶中的数据。此外，还会创建一项策略，为通过 MLflow SDK 与跟踪服务器交互的用户的 IAM 角色授予调用权限 MLflow APIs。有关更多信息，请参阅[修改角色权限策略（管理控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy)。

  如果使用 SageMaker Studio 笔记本，请使用这些 IAM 权限更新您的 Studio 用户个人资料的服务角色。要更新服务角色，请导航到 SageMaker AI 控制台并选择您正在使用的域。然后，在域下选择正在使用的用户配置文件。您将看到服务角色在此列出。导航至 IAM 管理控制台，在**角色**下搜索服务角色，然后使用允许 `iam:CreateRole`、`iam:CreatePolicy`、`iam:AttachRolePolicy` 和 `iam:ListPolicies` 操作的策略更新角色。

## 设置 AWS CLI 模型
<a name="mlflow-create-tracking-server-cli-setup"></a>

在终端中按照以下命令行步骤设置 AWS CLI 适用于 Amazon SageMaker AI 的 MLflow。

1. 安装更新版本的 AWS CLI。有关更多信息，请参阅《AWS CLI User Guide》**中的 [Install or update to the latest version of the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 使用以下命令验证 AWS CLI 是否已安装：

   ```
   aws sagemaker help
   ```

   按 `q` 键退出提示。

   有关问题排查帮助，请参阅[排除常见设置问题](mlflow-troubleshooting.md)。

## 设置 MLflow 基础架构
<a name="mlflow-create-tracking-server-cli-infra-setup"></a>

以下部分向您展示如何设置 MLflow 跟踪服务器以及跟踪服务器所需的 Amazon S3 存储桶和 IAM 角色。

### 创建 S3 存储桶
<a name="mlflow-infra-setup-s3-bucket"></a>

在终端中，使用以下命令创建一个通用的 Amazon S3 存储桶：

**重要**  
当您为项目存储提供 Amazon S3 URI 时，请确保 Amazon S3 存储桶与您的跟踪服务器位于同一 AWS 区域 位置。**不支持跨区域构件存储**。

```
bucket_name=bucket-name
region=valid-region

aws s3api create-bucket \
  --bucket $bucket_name \
  --region $region \
  --create-bucket-configuration LocationConstraint=$region
```

该输出值应该类似于以下内容：

```
{
    "Location": "/bucket-name"
}
```

### 设置 IAM 信任策略
<a name="mlflow-create-tracking-server-cli-trust-policy"></a>

使用以下步骤创建 IAM 信任策略。有关角色和信任策略的更多信息，请参阅《AWS Identity and Access Management 用户指南》中的[角色术语和概念](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html)。

1. 在终端中，使用以下命令创建名为 `mlflow-trust-policy.json` 的文件。

   ```
   cat <<EOF > /tmp/mlflow-trust-policy.json
   {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": [                     
                         "sagemaker.amazonaws.com"
                    ]
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
   EOF
   ```

1. 在终端中，使用以下命令创建名为 `custom-policy.json` 的文件。

   ```
   cat <<EOF > /tmp/custom-policy.json
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3:Get*",
                   "s3:Put*",
                   "sagemaker:AddTags",
                   "sagemaker:CreateModelPackageGroup",
                   "sagemaker:CreateModelPackage",
                   "sagemaker:DescribeModelPackageGroup",
                   "sagemaker:UpdateModelPackage",
                   "s3:List*"
               ],
               "Resource": "*"
           }
       ]
   }
   EOF
   ```

1. 使用信任策略文件创建角色。然后，附加允许 MLflow 在您的账户中访问 Amazon S3 和 SageMaker 模型注册表的 IAM 角色策略。 MLflow 必须有权访问 Amazon S3 才能访问跟踪服务器的工件存储区，并有权访问 SageMaker 模型注册表才能自动注册模型。
**注意**  
如果您要更新现有角色，请使用以下命令：`aws iam update-assume-role-policy --role-name $role_name --policy-document file:///tmp/mlflow-trust-policy.json`。

   ```
   role_name=role-name
   
   aws iam  create-role \
     --role-name $role_name \
     --assume-role-policy-document file:///tmp/mlflow-trust-policy.json
   
   aws iam put-role-policy \
     --role-name $role_name \
     --policy-name custom-policy \
     --policy-document file:///tmp/custom-policy.json
   
   role_arn=$(aws iam get-role --role-name  $role_name --query 'Role.Arn' --output text)
   ```

## 创建 MLflow 跟踪服务器
<a name="mlflow-create-tracking-server-cli-create"></a>

在您的终端中，使用 `create-mlflow-tracking-server` API 创建您选择 AWS 区域 的跟踪服务器。这一步骤可能需要 25 分钟。

您可以使用参数 `--tracking-server-config` 指定跟踪服务器的大小。在 `"Small"`、`"Medium"` 和 `"Large"` 之间进行选择。 MLflow 跟踪服务器的默认配置大小为`"Small"`。您可以根据跟踪服务器的预计使用情况（如记录的数据量、用户数量和使用频率）来选择大小。有关更多信息，请参阅 [MLflow 追踪服务器大小](mlflow.md#mlflow-create-tracking-server-sizes)。

下面的命令将创建一个启用了自动模型注册功能的新跟踪服务器。要停用自动模型注册，请指定 `--no-automatic-model-registration`。

创建跟踪服务器后，您可以启动 MLflow 用户界面。有关更多信息，请参阅 [使用预先指定的 URL 启动 MLflow 用户界面](mlflow-launch-ui.md)。

**注意**  
完成跟踪服务器创建可能需要 25 分钟。如果创建跟踪服务器的时间超过 25 分钟，请检查您是否拥有必要的 IAM 权限。有关 IAM 权限的更多信息，请参阅 [为设置 IAM 权限 MLflow](mlflow-create-tracking-server-iam.md)。成功创建跟踪服务器后，它会自动启动。

创建跟踪服务器时，我们建议指定最新版本。有关可用版本的信息，请参阅 [跟踪服务器版本](mlflow.md#mlflow-create-tracking-server-versions)。

默认情况下，创建的跟踪服务器是最新版本。但是，我们建议始终明确指定最新版本，因为底层版本 MLflow APIs 可能会发生变化。

```
ts_name=tracking-server-name
region=valid-region
version=valid-version        


aws sagemaker create-mlflow-tracking-server \
 --tracking-server-name $ts_name \
 --artifact-store-uri s3://$bucket_name \
 --role-arn $role_arn \
 --automatic-model-registration \
 --region $region \
 --mlflow-version $version
```

此输出应当类似于如下所示：

```
{
    "TrackingServerArn": "arn:aws:sagemaker:region:123456789012:mlflow-tracking-server/tracking-server-name"
}
```

**重要**  
**记下跟踪服务器的 ARN，以便日后使用。**您还需要 `$bucket_name` 来完成清理步骤。