

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

# Amazon 私有模型中心管理员指南 SageMaker JumpStart
<a name="jumpstart-curated-hubs-admin-guide"></a>

管理员可以采取一些与组织内用户可以访问的策管模型中心相关的操作。这包括创建、添加、删除和管理私有中心的访问权限。本页还包含了有关为策管的私有中心支持的 AWS 区域以及使用策管的私有模型中心所需的先决条件的信息。

## 支持的 AWS 区域
<a name="jumpstart-curated-hubs-admin-guide-regions"></a>

精心策划的私人中心目前在以下 AWS 商业区域普遍可用：
+ us-east-1
+ us-east-2
+ us-west-2
+ eu-west-1
+ eu-central-1
+ ap-northeast-1
+ ap-northeast-2
+ ap-south-1
+ ap-southeast-1
+ ap-southeast-2
+ il-central-1（仅限 SDK）

默认情况下，单个区域允许的最大中心数量为 50 个。

## 先决条件
<a name="jumpstart-curated-hubs-admin-guide-prerequisites"></a>

要在 Studio 中使用策管的私有中心，您必须具有以下先决条件：
+ 具有管理员访问权限的 AWS 账户
+ 有权访问 Amazon SageMaker Studio 的 AWS Identity and Access Management (IAM) 角色
+ 已 JumpStart 启用的 Amazon SageMaker AI 域
+ 如果您的用户尝试使用专有模型，则他们必须在 AWS Marketplace 中订阅这些模型。
+ AWS 部署专有模型的账户必须在 AWS Marketplace 中订阅这些模型。

有关 Studio 入门的更多信息，请参阅 [亚马逊 SageMaker Studio](studio-updated.md)。

# 创建私有模型中心
<a name="jumpstart-curated-hubs-admin-guide-create"></a>

使用以下步骤创建私有中心，以管理组织预训练 JumpStart 基础模型的访问控制。在创建模型中心之前，您必须安装 SageMaker Python 开发工具包并配置必要的 IAM 权限。

**创建私有中心**

1. 安装 SageMaker Python 软件开发工具包并导入必要的 Python 软件包。

   ```
   # Install the SageMaker Python SDK
   !pip3 install sagemaker --force-reinstall --quiet
   
   # Import the necessary Python packages
   import boto3
   from sagemaker import Session
   from sagemaker.jumpstart.hub.hub import Hub
   ```

1. 初始化 A SageMaker I 会话。

   ```
   sm_client = boto3.client('sagemaker')
   session = Session(sagemaker_client=sm_client)
   session.get_caller_identity_arn()
   ```

1. 配置私有中心的详细信息，例如内部中心名称、用户界面显示名称和用户界面中心描述。
**注意**  
如果您在创建中心时未指定 Amazon S3 存储桶名称，则 SageMaker中心服务会代表您创建一个新的存储桶。新存储桶的命名结构如下：`sagemaker-hubs-REGION-ACCOUNT_ID`。

   ```
   HUB_NAME="Example-Hub"
   HUB_DISPLAY_NAME="Example Hub UI Name"
   HUB_DESCRIPTION="A description of the example private curated hub."
   REGION="us-west-2"
   ```

1. 检查您的**管理员** IAM 角色是否拥有创建私有中心所需的 Amazon S3 权限。如果您的角色没有必要的权限，请导航到 IAM 管理控制台中的**角色**页面。选择**管理员**角色，然后在**权限策略**窗格中选择**添加权限**，即可使用 JSON 编辑器创建具有以下权限的内联策略：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject",
                   "s3:GetObjectTagging"
               ],
               "Resource": [
                   "arn:aws:s3:::jumpstart-cache-prod-REGION",
                   "arn:aws:s3:::jumpstart-cache-prod-REGION/*"
               ],
               "Effect": "Allow"
           }
       ]
   }
   ```

------

1. 使用 `hub.create()` **步骤 3** 中的配置创建私有模型中心。

   ```
   hub = Hub(hub_name=HUB_NAME, sagemaker_session=session)
   
   try:
   # Create the private hub
     hub.create(
         description=HUB_DESCRIPTION,
         display_name=HUB_DISPLAY_NAME
     )
     print(f"Successfully created Hub with name {HUB_NAME} in {REGION}")
   # Check that no other hubs with this internal name exist
   except Exception as e:
     if "ResourceInUse" in str(e):
       print(f"A hub with the name {HUB_NAME} already exists in your account.")
     else:
       raise e
   ```

1. 使用以下 `describe` 命令验证新的私有中心配置：

   ```
   hub.describe()
   ```

# 将模型添加到私有中心
<a name="jumpstart-curated-hubs-admin-guide-add-models"></a>

创建私有中心后，您就可以添加已列入许可名单的模型。有关可用 JumpStart 模型的完整列表，请参阅 SageMaker Python SDK 参考中的[带有预训练模型的内置算法表](https://sagemaker.readthedocs.io/en/stable/doc_utils/pretrainedmodels.html)。

1. 您可以使用 `hub.list_sagemaker_public_hub_models()` 方法以编程方式筛选可用的模型。您可以选择按框架 (`"framework == pytorch"`)、任务（如映像分类 (`"task == ic"`)）等类别进行筛选。有关筛选条件的更多信息，请参阅[https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/jumpstart/notebook_utils.py](https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/jumpstart/notebook_utils.py)。在 `hub.list_sagemaker_public_hub_models()` 方法中，筛选条件参数是可选的。

   ```
   filter_value = "framework == meta"
   response = hub.list_sagemaker_public_hub_models(filter=filter_value)
   models = response["hub_content_summaries"]
   while response["next_token"]:
       response = hub.list_sagemaker_public_hub_models(filter=filter_value, next_token=response["next_token"])
       models.extend(response["hub_content_summaries"])
   
   print(models)
   ```

1. 然后，您可以通过在 `hub.create_model_reference()` 方法中指定模型 ARN 来添加筛选后的模型。

   ```
   for model in models:
       print(f"Adding {model.get('hub_content_name')} to Hub")
       hub.create_model_reference(model_arn=model.get("hub_content_arn"), model_name=model.get("hub_content_name"))
   ```

# 更新私有中心中的资源
<a name="jumpstart-curated-hubs-update"></a>

您可以在私有中心中更新资源以更改其元数据。您可以更新的资源包括对 Amazon 模型的 SageMaker JumpStart模型引用、自定义模型、笔记本、数据集和 JsonDoc。

更新模型、笔记本、数据集或 JsonDoc 资源时，您可以更新内容描述、显示名称、关键字和支持状态。更新模型对 JumpStart 模型的引用时，只能更新指定要使用的最低模型版本的字段。
+ “更新模型或笔记本资源” 以包含 DataSet/JsonDoc。在 CLI 命令中， DataSets/JsonDocs 应添加到 hub-content-type参数中。

请按照特定于您希望更新的资源的部分进行操作。

## 更新模型或笔记本资源
<a name="jumpstart-curated-hubs-update-model-notebook"></a>

要更新模型或笔记本资源，请使用 [UpdateHubContent](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateHubContent.html)API。

您可以使用此 API 更新的有效元数据字段如下：
+ `HubContentDescription`：资源的描述。
+ `HubContentDisplayName`：资源的显示名称。
+ `HubContentMarkdown`：资源的描述，采用 Markdown 格式。
+ `HubContentSearchKeywords`：资源的可搜索关键字。
+ `SupportStatus`：资源的当前状态。

在您的请求中，请涵盖针对上述一个或多个字段的更改。如果您尝试更新任何其他字段，例如中心内容类型，则会收到错误消息。

------
#### [ 适用于 Python (Boto3) 的 AWS SDK ]

以下示例说明如何使用 适用于 Python (Boto3) 的 AWS SDK 提交[ UpdateHubContent](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateHubContent.html)请求。

**注意**  
您在请求中指定的 `HubContentVersion` 表示特定版本的元数据已更新。要查找您的中心内容的所有可用版本，您可以使用 [ ListHubContentVersions](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListHubContentVersions.html)API。

```
import boto3
sagemaker_client = boto3.Session(region_name=<AWS-region>).client("sagemaker")

sagemaker_client.update_hub_contents(
    HubName=<hub-name>,
    HubContentName=<resource-content-name>,
    HubContentType=<"Model"|"Notebook">,
    HubContentVersion='1.0.0', # specify the correct version that you want to update
    HubContentDescription=<updated-description-string>
)
```

------
#### [ AWS CLI ]

以下示例说明如何使用 AWS CLI 提交[ update-hub-content](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sagemaker/update-hub-content.html)请求。

```
aws sagemaker update-hub-content \
--hub-name <hub-name> \
--hub-content-name <resource-content-name> \
--hub-content-type <"Model"|"Notebook"> \
--hub-content-version "1.0.0" \
--hub-content-description <updated-description-string>
```

------

## 更新模型参考
<a name="jumpstart-curated-hubs-update-model-reference"></a>

要更新模型对 JumpStart 模型的引用，请使用 [ UpdateHubContentReference](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateHubContentReference.html)API。

您只能更新模型参考的 `MinVersion` 字段。

------
#### [ 适用于 Python (Boto3) 的 AWS SDK ]

以下示例说明如何使用 适用于 Python (Boto3) 的 AWS SDK 提交[ UpdateHubContentReference](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateHubContentReference.html)请求。

```
import boto3
sagemaker_client = boto3.Session(region_name=<AWS-region>).client("sagemaker")

update_response = sagemaker_client.update_hub_content_reference(
    HubName=<hub-name>,
    HubContentName=<model-reference-content-name>,
    HubContentType='ModelReference',
    MinVersion='1.0.0'
)
```

------
#### [ AWS CLI ]

以下示例说明如何使用 AWS CLI 提交[ update-hub-content-reference](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sagemaker/update-hub-content-reference.html)请求。

```
aws sagemaker update-hub-content-reference \
 --hub-name <hub-name> \
 --hub-content-name <model-reference-content-name> \
 --hub-content-type "ModelReference" \
 --min-version "1.0.0"
```

------

# 私有模型中心的跨账户共享 AWS Resource Access Manager
<a name="jumpstart-curated-hubs-ram"></a>

创建私有模型中心后，您可以使用 AWS Resource Access Manager (AWS RAM) 将该中心共享给必要的帐户。有关创建私有中心的更多信息，请参阅 [创建私有模型中心](jumpstart-curated-hubs-admin-guide-create.md)。下一页将深入介绍与 AWS RAM中私有中心相关的托管权限。有关如何在中创建资源共享的信息 AWS RAM，请参阅[设置跨账户中心共享](jumpstart-curated-hubs-ram-setup.md)。

## 策管的私有中心的托管权限
<a name="jumpstart-curated-hubs-ram-permissions"></a>

可用的访问权限包括读取、读取和使用以及完全访问权限。以下列出了每个权限的权限名称、描述和特定 APIs 可用权限列表：
+ 读取权限 (`AWS RAMPermissionSageMaker AIHubRead`)：读取权限允许资源使用者账户读取共享中心中的内容并查看详细信息和元数据。
  + `DescribeHub`：检索有关中心及其配置的详细信息
  + `DescribeHubContent`：检索有关特定中心可用模型的详细信息
  + `ListHubContent`：列出中心中的所有可用模型
  + `ListHubContentVersions`：列出中心中所有可用模型的版本
+ 读取和使用权限 (`AWS RAMPermissionSageMaker AIHubReadAndUse`)：读取和使用权限允许资源使用者账户读取共享中心中的内容，并部署可用模型进行推理。
  + `DescribeHub`：检索有关中心及其配置的详细信息
  + `DescribeHubContent`：检索有关特定中心可用模型的详细信息
  + `ListHubContent`：列出中心中的所有可用模型
  + `ListHubContentVersions`：列出中心中所有可用模型的版本
  + `DeployHubModel`：支持部署用于推理的可用开放权重中心模型
+ 完全访问权限 (`AWS RAMPermissionSageMaker AIHubFullAccessPolicy`)：完全访问权限允许资源使用者账户读取共享中心中的内容、添加和删除中心内容，并部署用于推理的可用模型。
  + `DescribeHub`：检索有关中心及其配置的详细信息
  + `DescribeHubContent`：检索有关特定中心可用模型的详细信息
  + `ListHubContent`：列出中心中的所有可用模型
  + `ListHubContentVersions`：列出中心中所有可用模型的版本
  + `ImportHubContent`：导入中心内容 
  + `DeleteHubContent`：删除中心内容
  + `CreateHubContentReference`: 创建中心内容引用，将模型从 SageMaker AI **公共模型**中心共享到私有中心 
  + `DeleteHubContentReference`: 删除从 SageMaker AI **公共模型中心到私有中心共享模型**的中心内容引用 
  + `DeployHubModel`：支持部署用于推理的可用开放权重中心模型

专有模型不需要 `DeployHubModel` 权限。

# 设置跨账户中心共享
<a name="jumpstart-curated-hubs-ram-setup"></a>

SageMaker 使用 [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) 帮助您安全地跨账户共享您的私有中心。使用以下说明以及*AWS RAM 用户指南*中的共享[AWS 资源说明来设置跨账户中心共享](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-create)。

**创建资源共享**

1. 通过 [AWS RAM 管理控制台](https://console.aws.amazon.com/ram/home)选择**创建资源共享**。

1. 指定资源共享详细信息时，请选择**SageMaker 集线器**资源类型，然后再选择一个要共享的专用集线器。当您与任何其他账户共享中心时，其所有内容也会被隐式共享。

1. 将权限与资源共享关联。有关托管权限的更多信息，请参阅 [策管的私有中心的托管权限](jumpstart-curated-hubs-ram.md#jumpstart-curated-hubs-ram-permissions)。

1. 使用 AWS 账户指定 IDs 要向其授予共享资源访问权限的账户。

1. 查看您的资源共享配置，然后选择**创建资源共享**。可能需要几分钟时间来完成资源共享和主体关联。

有关更多信息，请参阅《*AWS Resource Access Manager 用户指南》*[中的共享 AWS 资源](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html)。

设置资源共享和主体关联后，指定的 AWS 账户会收到加入资源共享的邀请。 AWS 账号必须接受邀请才能访问任何共享资源。

有关通过接受资源共享邀请的更多信息 AWS RAM，请参阅*AWS Resource Access Manager 用户指南*中的[使用共享 AWS 资源](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-shared.html)。

# 从私有中心删除模型
<a name="jumpstart-curated-hubs-admin-guide-delete-models"></a>

通过在 `hub.delete_model_reference()` 方法中指定模型 ARN，您可以从组织使用的私有中心中删除模型。这就取消了从私有中心访问模型的权限。

```
hub.delete_model_reference(model-name)
```

# 限制对 JumpStart 门控模型的访问权限
<a name="jumpstart-curated-hubs-gated-model-access"></a>

Amazon SageMaker JumpStart 提供对公开和专有基础模型的访问权限。私有 Amazon S3 存储桶中的某些门控模型需要您接受模型的 EULA（最终用户许可协议）后才能访问这些模型。有关更多信息，请参阅 [使用 SDK 接受最终用户许可协议 SageMaker Python](jumpstart-foundation-models-choose.md#jumpstart-foundation-models-choose-eula-python-sdk)。

当前的默认行为是，如果用户接受模型的 EULA，则用户可以访问模型并创建[微调训练作业](jumpstart-foundation-models-use-python-sdk-estimator-class.md)。但是，如果您是管理员，并且想要限制对这些门控模型的微调访问权限，则可以设置一个策略，拒绝在向门控模型发出请求时使用 `CreateTrainingJob` 操作的权限。

以下是管理员可以向用户的 IAM 角色添加的示例 AWS Identity and Access Management (IAM) 策略：

```
{
    "Effect": "Deny",
    "Action": "sagemaker:CreateTrainingJob",
    "Resource": "*",
    "Condition": {
        "Bool": {
            "sagemaker:DirectGatedModelAccess": "true"
        }
    }
}
```

如果您想授予用户访问特定模型的权限，而不提供对门控模型的无限制访问权限，请设置策管中心并将具体的模型添加到该中心。有关更多信息，请参阅 [用于基础模型访问控制的私人策划中心 JumpStart](jumpstart-curated-hubs.md)。

# 移除对 SageMaker **公共模型**中心的访问权限
<a name="jumpstart-curated-hubs-admin-guide-remove-public-hub"></a>

除了在 Studio JumpStart 中添加私有精选中心外，您还可以取消用户对 SageMaker **公共模型**中心的访问权限。 SageMaker **公共模型**中心可以访问所有可用的 JumpStart 基础模型。

如果您删除了对 SageMaker **公共模型**中心的访问权限，并且用户只能访问一个专用中心，则当用户在 Studio 的左侧导航窗格**JumpStart**中进行选择时，他们将直接进入该专用中心。如果用户可以访问多个专用集线器，则当用户在 Studio 的左侧导航窗格**JumpStart**中进行选择时，系统会将该用户带到**集线器**菜单页面。

使用以下内联策略删除用户对 SageMaker **公共模型**中心的访问权限：

**注意**  
您可以在下面的策略中指定您希望中心访问的任何其他 Amazon S3 存储桶。请务必将 *`REGION`* 替换为您中心的区域。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "s3:*",
            "Effect": "Deny",
            "NotResource": [
                "arn:aws:s3:::jumpstart-cache-prod-us-east-1/*.ipynb",
                "arn:aws:s3:::jumpstart-cache-prod-us-east-1/*eula*",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Action": "sagemaker:*",
            "Effect": "Deny",
            "Resource": [
                "arn:aws:sagemaker:us-east-1:aws:hub/SageMakerPublicHub",
                "arn:aws:sagemaker:us-east-1:aws:hub-content/SageMakerPublicHub/*/*"
            ]
        }
    ]
}
```

------

# 删除私有中心
<a name="jumpstart-curated-hubs-admin-guide-delete"></a>

您可以从管理员账户删除私有中心。删除私有中心之前，您必须先删除此中心中的任何内容。使用以下命令删除中心内容和中心：

```
# List the model references in the private hub
response = hub.list_models()
models = response["hub_content_summaries"]
while response["next_token"]:
    response = hub.list_models(next_token=response["next_token"])
    models.extend(response["hub_content_summaries"])

# Delete all model references in the hub
for model in models:
    hub.delete_model_reference(model_name=model.get('HubContentName'))

# Delete the private hub
hub.delete()
```

# 问题排查
<a name="jumpstart-curated-hubs-admin-guide-troubleshooting"></a>

以下几节将介绍有关创建私有模型中心时可能出现的 IAM 权限问题以及如何解决这些问题的信息。

**调用 `CreateModel` 操作时 `ValidationException`：无法访问模型数据**

如果您没有为**管理员**角色配置相应的 Amazon S3 权限，则会出现此异常。有关创建私有中心所需的 Amazon S3 权限的更多信息，请参阅 [创建私有模型中心](jumpstart-curated-hubs-admin-guide-create.md) 中的 **步骤 3**。

**调用 `create()` 时 `Access Denied` 或 `Forbidden`**

如果您没有访问与 SageMaker**公共模型**中心关联的 Amazon S3 存储桶的相应权限，则在创建私有中心时会被拒绝访问。有关创建私有中心所需的 Amazon S3 权限的更多信息，请参阅 [创建私有模型中心](jumpstart-curated-hubs-admin-guide-create.md) 中的 **步骤 3**。