

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

# 让 SageMaker AI 训练作业访问您的 Amazon VPC 中的资源
<a name="train-vpc"></a>

**注意**  
对于训练作业，如果实例在共享硬件上运行，您只能配置默认租赁 VPC 的子网。有关租期属性的更多信息 VPCs，请参阅[专用实例](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/dedicated-instance.html)。

## 配置训练作业以进行 Amazon VPC 访问
<a name="train-vpc-configure"></a>

要控制对训练作业的访问，请在 Amazon VPC 中运行这些作业，该 VPC 的私有子网无法访问互联网。

您可以通过指定其子网和安全组 IDs将训练作业配置为在 VPC 中运行。您无需为训练作业的容器指定子网。Amazon SageMaker AI 会自动从亚马逊 ECR 中提取训练容器镜像。

创建训练任务时，您可以使用 Amazon A SageMaker I 控制台或 API 指定 VPC 中的子网和安全组。

要使用 API，请在[ CreateTrainingJob](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateTrainingJob.html)操作的`VpcConfig`参数 IDs 中指定子网和安全组。 SageMaker AI 使用子网和安全组详细信息来创建网络接口并将其连接到训练容器。网络接口在您的 VPC 中为训练容器提供网络连接。这允许训练作业连接到您的 VPC 中存在的资源。

以下是您在调用 `CreateTrainingJob` 操作时将包含的 `VpcConfig` 参数的示例：

```
VpcConfig: {
      "Subnets": [
          "subnet-0123456789abcdef0",
          "subnet-0123456789abcdef1",
          "subnet-0123456789abcdef2"
          ],
      "SecurityGroupIds": [
          "sg-0123456789abcdef0"
          ]
        }
```

## 配置您的私有 VPC 以进行 SageMaker AI 训练
<a name="train-vpc-vpc"></a>

为您的 SageMaker AI 训练任务配置私有 VPC 时，请遵循以下指南。有关设置 VPC 的信息，请参阅 *Amazon VPC 用户指南*中的[使用 VPCs 和子网](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/working-with-vpcs.html)。

**Topics**
+ [确保子网拥有足够的 IP 地址](#train-vpc-ip)
+ [创建 Amazon S3 VPC 端点](#train-vpc-s3)
+ [使用自定义终端节点策略限制 S3 访问](#train-vpc-policy)
+ [配置路由表](#train-vpc-route-table)
+ [配置 VPC 安全组](#train-vpc-groups)
+ [连接到 VPC 之外的资源](#train-vpc-nat)
+ [使用 CloudWatch 日志和指标监控 Amazon SageMaker 训练作业](#train-vpc-cloudwatch)

### 确保子网拥有足够的 IP 地址
<a name="train-vpc-ip"></a>

*不使用* Elastic Fabric Adapter (EFA) 的训练实例应至少有 2 个私有 IP 地址。使用 EFA 的训练实例应至少有 5 个私有 IP 地址。有关更多信息，请参阅《Amazon EC2 用户指南》中的[多个 IP 地址](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/MultipleIP.html)。

对于训练作业中的每个实例，您的 VPC 子网应至少拥有两个私有 IP 地址。有关更多信息，请参阅 *Amazon VPC 用户指南 IPv4中的 VPC* [和子网大小](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/VPC_Subnets.html#vpc-sizing-ipv4)。

### 创建 Amazon S3 VPC 端点
<a name="train-vpc-s3"></a>

如果您将 VPC 配置为使训练容器不具有互联网访问权限，则这些容器无法连接到包含训练数据的 Amazon S3 存储桶，除非您创建一个允许访问的 VPC 端点。通过创建 VPC 终端节点，您允许训练容器访问用于存储数据和模型构件的存储桶。我们还建议您创建自定义策略，只允许来自私有 VPC 的请求访问您的 S3 存储桶。有关更多信息，请参阅[用于 Amazon S3的端点](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/vpc-endpoints-s3.html)。

**要创建 S3 VPC 终端节点，请执行以下操作：**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.amazonaws.cn/vpc/) 的 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Endpoints (终端节点)**，然后选择 **Create Endpoint (创建终端节点)**。

1. 对于**服务名称**，请搜索 **com.amazonaws。 *region*.s3**，其中*region*是您的 VPC 所在区域的名称。

1. 选择**网关类型**。

1. 对于 **VPC**，请选择要用于该终端节点的 VPC。

1. 对于 **Configure route tables**，选择终端节点要使用的路由表。VPC 服务自动将一个路由添加到您选择的每个路由表中，它将任何 S3 流量传送到新的终端节点。

1. 对于 **Policy (策略)**，请选择 **Full Access (完全访问)** 以允许 VPC 中的任何用户或服务完全访问 S3 服务。选择 **Custom (自定义)** 以进一步限制访问。有关信息，请参阅[使用自定义终端节点策略限制 S3 访问](#train-vpc-policy)。

### 使用自定义终端节点策略限制 S3 访问
<a name="train-vpc-policy"></a>

默认终端节点策略允许您的 VPC 中的任何用户或服务完全访问 S3。要进一步限制 S3 访问，请创建一个自定义终端节点策略。有关更多信息，请参阅[对 Amazon S3 使用端点策略](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-endpoints-s3.html#vpc-endpoints-policies-s3)。您也可以使用存储桶策略将 S3 存储桶访问限制为仅来自您的 Amazon VPC 的流量。有关信息，请参阅[使用 Amazon S3 存储桶策略](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-endpoints-s3.html#vpc-endpoints-s3-bucket-policies)。

#### 限制在训练容器上安装包
<a name="train-vpc-policy-repos"></a>

默认终端节点策略允许用户在训练容器中安装来自 Amazon Linux 和 Amazon Linux 2 存储库的包。如果您不希望用户安装来自该存储库的包，则创建一个自定义终端节点策略，明确拒绝访问 Amazon Linux 和 Amazon Linux 2 存储库。以下是拒绝访问这些存储库的策略示例：

```
{ 
    "Statement": [ 
      { 
        "Sid": "AmazonLinuxAMIRepositoryAccess",
        "Principal": "*",
        "Action": [ 
            "s3:GetObject" 
        ],
        "Effect": "Deny",
        "Resource": [
            "arn:aws:s3:::packages.*.amazonaws.com/*",
            "arn:aws:s3:::repo.*.amazonaws.com/*"
        ] 
      } 
    ] 
} 

{ 
    "Statement": [ 
        { "Sid": "AmazonLinux2AMIRepositoryAccess",
          "Principal": "*",
          "Action": [ 
              "s3:GetObject" 
              ],
          "Effect": "Deny",
          "Resource": [
              "arn:aws:s3:::amazonlinux.*.amazonaws.com/*" 
              ] 
         } 
    ] 
}
```

### 配置路由表
<a name="train-vpc-route-table"></a>

使用终端节点路由表的默认 DNS 设置，以便标准的 Amazon S3 URLs （例如`http://s3-aws-region.amazonaws.com/amzn-s3-demo-bucket`）可以解析。如果您不使用默认 DNS 设置，请确保通过配置终端节点路由表来解析用于指定训练作业中数据位置的。 URLs 有关 VPC 端点路由表的信息，请参阅《Amazon VPC 用户指南》**中的[网关端点路由](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/vpce-gateway.html#vpc-endpoints-routing)。

### 配置 VPC 安全组
<a name="train-vpc-groups"></a>

在分布式训练中，您必须允许同一训练作业中的不同容器之间进行通信。为此，请为您的安全组配置规则，以允许同一安全组的成员之间实现入站连接。对于启用了 EFA 的实例，请确保入站和出站连接都允许来自同一安全组的所有流量。有关信息，请参阅《Amazon Virtual Private Cloud 用户指南》**中的[安全组规则](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html#SecurityGroupRules)。

### 连接到 VPC 之外的资源
<a name="train-vpc-nat"></a>

如果您将 VPC 配置为不具有 Internet 访问权限，则使用该 VPC 的训练作业无权访问 VPC 之外的资源。如果您的训练作业需要访问您的 VPC 外部的资源，请使用以下选项之一提供访问权限：
+ 如果您的训练作业需要访问支持接口 VPC 终端节点的 Amazon 服务，请创建一个终端节点来连接到该服务。有关支持接口端点的服务的列表，请参阅《Amazon Virtual Private Cloud 用户指南》**中的 [VPC 端点](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/vpc-endpoints.html)。有关创建接口 VPC 终端节点的信息，请参阅 *Amazon Virtual Private Cloud 用户指南*[中的接口 VPC 终端节点 (Amazon PrivateLink)](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/vpce-interface.html)。
+ 如果您的训练作业需要访问不支持接口 VPC 终端节点的 Amazon 服务或外部的资源 Amazon，请创建 NAT 网关并将您的安全组配置为允许出站连接。有关为 VPC 设置 NAT 网关的信息，请参阅 [Amazon Virtual Private Cloud 用户指南](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/VPC_Scenario2.html)中的*场景 2：带有公有子网和私有子网 (NAT) 的 VPC*。

### 使用 CloudWatch 日志和指标监控 Amazon SageMaker 训练作业
<a name="train-vpc-cloudwatch"></a>

Amazon A SageMaker I 提供亚马逊 CloudWatch 日志和指标来监控训练作业。 CloudWatch 提供 CPU、GPU、内存、GPU 内存和磁盘指标以及事件记录。有关监控 Amazon SageMaker 培训作业的更多信息，请参阅[亚马逊中的亚马逊 A SageMaker I 指标 CloudWatch](monitoring-cloudwatch.md)和[SageMaker AI 工作指标](monitoring-cloudwatch.md#cloudwatch-metrics-jobs)。