

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

# Amazon SageMaker Studio 支持本地模式
<a name="studio-updated-local"></a>

**重要**  
允许 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 创建亚马逊 SageMaker资源的自定义 IAM 策略还必须授予向这些资源添加标签的权限。之所以需要为资源添加标签的权限，是因为 Studio 和 Studio Classic 会自动为创建的任何资源添加标签。如果 IAM 策略允许 Studio 和 Studio Classic 创建资源但不允许标记，则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息，请参阅 [提供标记 A SageMaker I 资源的权限](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
[AWS 亚马逊 A SageMaker I 的托管策略](security-iam-awsmanpol.md)授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。

Amazon SageMaker Studio 应用程序支持使用本地模式创建估算器、处理器和管道，然后将其部署到本地环境。在本地模式下，您可以先测试机器学习脚本，然后再在 Amazon A SageMaker I 托管训练或托管环境中运行它们。Studio 在以下应用程序中支持本地模式：
+ 亚马逊 SageMaker Studio 经典版
+ JupyterLab
+ 基于 Code-OSS（Visual Studio Code 的开源版本）的代码编辑器

Studio 应用程序中的本地模式是使用 SageMaker Python 软件开发工具包调用的。在 Studio 应用程序中，本地模式的功能与其在 Amazon SageMaker 笔记本实例中的功能类似，但有一些区别。启用 [无根 Docker 配置](studio-updated-local-get-started.md#studio-updated-local-rootless)后，您还可以通过 VPC 配置访问其他 Docker 注册表，包括本地存储库和公有注册表。有关在 SageMaker Python SDK 中使用本地模式的更多信息，请参阅[本地模式](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode)。

**注意**  
Studio 应用程序不支持本地模式下的多容器作业。本地模式下的训练、推理和处理工作仅限于单个实例。创建本地模式作业时，实例计数配置必须为 `1`。 

## Docker 支持
<a name="studio-updated-local-docker"></a>

作为本地模式支持的一部分，Studio 应用程序支持有限的 Docker 访问功能。有了这种支持，用户就可以通过 Jupyter Notebook 或应用程序的映像终端与 Docker API 进行交互。客户可以使用以下方式之一与 Docker 进行互动：
+ [Docker CLI](https://docs.docker.com/engine/reference/run/)
+ [Docker Compose CLI ](https://docs.docker.com/compose/reference/)
+ 特定语言的 Docker SDK 客户端

Studio 还支持有限 Docker 访问功能，并有以下限制：
+ 不支持使用 Docker 网络。
+ Docker[ 容器](https://docs.docker.com/storage/volumes/)运行期间不支持使用卷。在容器编排过程中，只允许使用卷绑定挂载输入。卷绑定挂载输入必须位于 Studio Classic 的 Amazon Elastic File System (Amazon EFS) 卷上。对于 JupyterLab 和代码编辑器应用程序，它必须位于亚马逊 Elastic Block Store (Amazon EBS) 卷上。
+ 允许进行容器检查操作。
+ 不允许将容器端口映射到主机。但是，您可以指定主机端口。然后就可以使用以下网址从 Studio 访问该端点：

  ```
  http://localhost:port
  ```

### 支持的 Docker 操作
<a name="studio-updated-local-docker-supported"></a>

下表列出了 Studio 支持的所有 Docker API 端点，包括任何支持限制。如果表格中缺少某个 API 端点，则表示 Studio 不支持该 API 端点。


|  API 文档  |  限制  | 
| --- | --- | 
|  [SystemAuth](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemAuth)  |   | 
|  [SystemEvents](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemEvents)  |   | 
|  [SystemVersion](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemVersion)  |   | 
|  [SystemPing](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemPing)  |   | 
|  [SystemPingHead](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemPingHead)  |   | 
|  [ContainerCreate](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerCreate)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/studio-updated-local.html)  | 
|  [ContainerStart](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerStart)  |   | 
|  [ContainerStop](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerStop)  |   | 
|  [ContainerKill](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerKill)  |   | 
|  [ContainerDelete](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerDelete)  |   | 
|  [ContainerList](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerList)  |   | 
|  [ContainerLogs](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerLogs)  |   | 
|  [ContainerInspect](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect)  |   | 
|  [ContainerWait](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerWait)  |   | 
|  [ContainerAttach](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerAttach)  |   | 
|  [ContainerPrune](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerPrune)  |   | 
|  [ContainerResize](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerResize)  |   | 
|  [ImageCreate](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageCreate)  |  VPC-only 模式支持仅限于允许列表账户中的 Amazon ECR 映像。启用 [无根 Docker 配置](studio-updated-local-get-started.md#studio-updated-local-rootless)后，您还可以通过 VPC 配置访问其他 Docker 注册表，包括本地存储库和公有注册表。 | 
|  [ImagePrune](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImagePrune)  |   | 
|  [ImagePush](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImagePush)  |  VPC-only 模式支持仅限于允许列表账户中的 Amazon ECR 映像。启用 [无根 Docker 配置](studio-updated-local-get-started.md#studio-updated-local-rootless)后，您还可以通过 VPC 配置访问其他 Docker 注册表，包括本地存储库和公有注册表。 | 
|  [ImageList](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageList)  |   | 
|  [ImageInspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect)  |   | 
|  [ImageGet](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageGet)  |   | 
|  [ImageDelete](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageDelete)  |   | 
|  [ImageBuild](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageBuild)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/studio-updated-local.html)  | 

**Topics**
+ [Docker 支持](#studio-updated-local-docker)
+ [开始使用本地模式](studio-updated-local-get-started.md)

# 开始使用本地模式
<a name="studio-updated-local-get-started"></a>

以下各节概述了在 Amazon SageMaker Studio 中开始使用本地模式所需的步骤，包括：
+ 满足先决条件
+ 设置 `EnableDockerAccess`
+ Docker 安装

## 先决条件
<a name="studio-updated-local-prereq"></a>

要在 Studio 应用程序中使用本地模式，请完成以下先决条件：
+ 要从 Amazon Elastic Container Registry 存储库中提取映像，托管 Amazon ECR 映像的账户必须为用户的执行角色提供访问权限。此域的执行角色也必须允许 Amazon ECR 访问。
+ 使用以下命令验证您使用的是最新版本的 Studio Python SDK： 

  ```
  pip install -U sagemaker
  ```
+ 要使用本地模式和 Docker 功能，请使用 AWS Command Line Interface (AWS CLI) 设置域的 `DockerSettings` 以下参数： 

  ```
  EnableDockerAccess : ENABLED
  ```
+ 使用 `EnableDockerAccess`，您还可以控制域中的用户是否可以使用本地模式。默认情况下，Studio 应用程序不允许使用本地模式和 Docker 功能。有关更多信息，请参阅 [设置 `EnableDockerAccess`](#studio-updated-local-enable)。
+ 按照 [Docker 安装](#studio-updated-local-docker-installation) 中的步骤在 Studio 应用程序中安装 Docker CLI。
+ 对于 [无根 Docker 配置](#studio-updated-local-rootless)，请确保 VPC 已为所需的 Docker 注册表配置适当的端点和路由。

## 设置 `EnableDockerAccess`
<a name="studio-updated-local-enable"></a>

以下各节将介绍如何在域可访问公共互联网或处于 `VPC-only` 模式时设置 `EnableDockerAccess`。

**注意**  
对 `EnableDockerAccess` 的更改仅适用于域更新后创建的应用程序。您必须在更新域后创建新的应用程序。

**公共互联网访问**

以下示例命令显示了在可以访问公共互联网的情况下创建新域或更新现有域时如何设置 `EnableDockerAccess`：

```
# create new domain
aws --region region \
    sagemaker create-domain --domain-name domain-name \
    --vpc-id vpc-id \
    --subnet-ids subnet-ids \
    --auth-mode IAM \
    --default-user-settings "ExecutionRole=execution-role" \
    --domain-settings '{"DockerSettings": {"EnableDockerAccess": "ENABLED"}}' \
    --query DomainArn \
    --output text

# update domain
aws --region region \
    sagemaker update-domain --domain-id domain-id \
    --domain-settings-for-update '{"DockerSettings": {"EnableDockerAccess": "ENABLED"}}'
```

**`VPC-only` 模式**

在 `VPC-only` 模式下使用域时，Docker 映像推送和拉取请求将通过服务 VPC 而不是客户配置的 VPC 进行路由。由于此功能，管理员可以配置用户可以向其中发出 Amazon ECR Docker 拉取和推送操作请求的受信任 AWS 账户 列表。

如果向不在可信列表中的用户发出Docker AWS 账户 图像推送或拉取请求 AWS 账户，则请求将失败。 Docker模式下不支持亚马逊弹性容器注册表 (Amazon ECR) Container Registry 之外的拉取和推送操作。`VPC-only`

默认情况下，以下内容 AWS 账户 是可信的：
+ 托管 SageMaker AI 域的账户。
+ SageMaker 托管以下 SageMaker 图片的 AI 账户：
  + DLC 框架映像
  + sklearnSpark， XGBoost 处理图像

要配置其他可信列表 AWS 账户，请按以下方式指定`VpcOnlyTrustedAccounts`值：

```
aws --region region \
    sagemaker update-domain --domain-id domain-id \
    --domain-settings-for-update '{"DockerSettings": {"EnableDockerAccess": "ENABLED", "VpcOnlyTrustedAccounts": ["account-list"]}}'
```

**注意**  
启用 [无根 Docker 配置](#studio-updated-local-rootless)后，`VpcOnlyTrustedAccounts` 将被忽略，并且 Docker 流量会通过 VPC 配置进行路由，从而允许访问 VPC 可触达的任何注册表。

## 无根 Docker 配置
<a name="studio-updated-local-rootless"></a>

启用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DockerSettings.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DockerSettings.html) 后，Studio 将使用[无根 Docker 进程守护程序](https://docs.docker.com/engine/security/rootless/)，通过 VPC 路由流量。这将增强安全性，并允许访问其他 Docker 注册表。与 `RootlessDocker` 之间的主要区别是：
+ 容器端口可通过 Docker 网关 IP（`172.17.0.1`）而非 localhost 进行访问。
+ VPC 配置将决定 Docker 操作可访问的注册表。`VpcOnlyTrustedAccounts` 将被忽略，并且 Docker 流量会通过 VPC 配置进行路由。

要使用无根 Docker，您需要为 `DockerSettings` 将 `EnableDockerAccess` 和 `RootlessDocker` 都设置为 `ENABLED`。例如，在上面的 [设置 `EnableDockerAccess`](#studio-updated-local-enable) 示例中，您可以修改域设置以包括：

```
'{"DockerSettings": {"EnableDockerAccess": "ENABLED", "RootlessDocker": "ENABLED"}}'
```

## Docker 安装
<a name="studio-updated-local-docker-installation"></a>

要使用 Docker，您必须在 Studio 应用程序的终端手动安装 Docker。如果域可以访问互联网，安装 Docker 的步骤则有所不同。

### 互联网访问
<a name="studio-updated-local-docker-installation-internet"></a>

如果域是在可以访问公共互联网或在访问互联网受限的 `VPC-only` 模式下创建的，请使用以下步骤安装 Docker。

1. （可选）如果您的域是在互联网访问受限的 `VPC-only` 模式下创建的，请创建一个可访问 Docker 网站的公共 NAT 网关。有关说明，请参阅 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。

1. 导航到要安装 Docker 的 Studio 应用程序的终端。

1. 要返回应用程序的操作系统，请在终端运行以下命令：

   ```
   cat /etc/os-release
   ```

1. Docker按照 [Amazon A SageMaker I 本地模式示例存储库](https://github.com/aws-samples/amazon-sagemaker-local-mode/tree/main/sagemaker_studio_docker_cli_install)中应用程序操作系统的说明进行安装。

   例如，Docker按Ubuntu照 [https://github.com/aws-samples/amazon-sagemaker-local-mode/blob/main/sagemaker\$1studio\$1docker\$1cli\$1install/sagemaker-ubuntu-focal-docker-cli-install.sh](https://github.com/aws-samples/amazon-sagemaker-local-mode/blob/main/sagemaker_studio_docker_cli_install/sagemaker-ubuntu-focal-docker-cli-install.sh) 的脚本进行安装，注意以下几点：
   + 如果链接命令失败，请逐个运行命令。
   + Studio 仅支持 Docker 版本 `20.10.X.` 和 Docker Engine API 版本 `1.41`。
   + 在 Studio 中使用 Docker CLI 不需要安装下列软件包，因此可以跳过它们的安装：
     + `containerd.io`
     + `docker-ce`
     + `docker-buildx-plugin`
**注意**  
您无需在应用程序中启动 Docker 服务。托管 Studio 应用程序的实例默认运行 Docker 服务。所有 Docker API 调用都会自动通过 Docker 服务进行路由。

1. 在 Studio 应用程序中使用公开的 Docker 套接字进行 Docker 交互。默认情况下，以下套接字处于公开状态：

   ```
   unix:///docker/proxy.sock
   ```

   以下 Studio 应用程序环境变量默认 `USER` 使用此公开的套接字：

   ```
   DOCKER_HOST
   ```

### 无法访问互联网
<a name="studio-updated-local-docker-installation-no-internet"></a>

如果域是在无法访问互联网的 `VPC-only` 模式下创建的，请使用以下步骤安装 Docker。

1. 导航到要安装 Docker 的 Studio 应用程序的终端。

1. 从终端运行以下命令，返回应用程序的操作系统：

   ```
   cat /etc/os-release
   ```

1. 将所需的 Docker `.deb` 文件下载到本地计算机。有关为 Studio 应用程序的操作系统下载所需文件的说明，请参阅[安装 Docker 引擎](https://docs.docker.com/engine/install/)。

   例如，在 Ubuntu 上按照[从软件包安装](https://docs.docker.com/engine/install/ubuntu/#install-from-a-package)中的第 1-4 步安装 Docker，并注意以下事项：
   + 从软件包安装 Docker。使用其他方法安装 Docker 会失败。
   + 安装与 Docker 版本 `20.10.X` 相对应的最新软件包。
   + 在 Studio 中使用 Docker CLI 不需要下列软件包。您无需安装以下程序：
     + `containerd.io`
     + `docker-ce`
     + `docker-buildx-plugin`
**注意**  
您无需在应用程序中启动 Docker 服务。托管 Studio 应用程序的实例默认运行 Docker 服务。所有 Docker API 调用都会自动通过 Docker 服务进行路由。

1. 将 `.deb` 文件上传到应用程序的 Amazon EFS 文件系统或 Amazon EBS 文件系统。

1. 从 Studio 应用程序终端手动安装 `docker-ce-cli` 和 `docker-compose-plugin` `.deb` 软件包。有关更多信息和说明，请参阅 Docker 文档网站上的[从软件包安装](https://docs.docker.com/engine/install/ubuntu/#install-from-a-package)中的第 5 步。

1. 在 Studio 应用程序中使用公开的 Docker 套接字进行 Docker 交互。默认情况下，以下套接字处于公开状态：

   ```
   unix:///docker/proxy.sock
   ```

   以下 Studio 应用程序环境变量默认 `USER` 使用此公开的套接字：

   ```
   DOCKER_HOST
   ```