

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

# 为 Amazon SageMaker Studio Classic 创建自定义 SageMaker 图片
<a name="studio-byoi-create"></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 资源的权限已经包括在创建这些资源时添加标签的权限。

**重要**  
截至 2023 年 11 月 30 日，之前的亚马逊 SageMaker Studio 体验现在被命名为 Amazon St SageMaker udio Classic。以下部分专门介绍如何使用 Studio Classic 应用程序。有关使用更新的 Studio 体验的信息，请参阅 [亚马逊 SageMaker Studio](studio-updated.md)。  
Studio Classic 仍针对现有工作负载进行维护，但不再可供入门使用。您只能停止或删除现有的 Studio Classic 应用程序，不能创建新的应用程序。我们建议您将[工作负载迁移到全新 Studio 体验](studio-updated-migrate.md)。

本主题介绍如何使用 SageMaker AI 控制台或创建自定义 SageMaker 镜像 AWS CLI。

当您从控制台创建图像时， SageMaker AI 还会创建初始图像版本。映像版本代表 [Amazon Elastic Container Registry (ECR)](https://console.aws.amazon.com/ecr/) 中的容器映像。容器图片必须满足要求才能在 Amazon SageMaker Studio Classic 中使用。有关更多信息，请参阅 [亚马逊 SageMaker Studio 经典版的自定义 SageMaker 图片规格](studio-byoi-specs.md)。有关在本地测试图像和解决常见问题的信息，请参阅 [SageMaker Studio Classic 自定义图像样本存储库](https://github.com/aws-samples/sagemaker-studio-custom-image-samples/blob/main/DEVELOPMENT.md)。

创建自定义 SageMaker 映像后，必须将其附加到您的域名或共享空间，才能将其与 Studio Classic 一起使用。有关更多信息，请参阅 [在 Amazon SageMaker Studio 经典版中附加自定义 SageMaker 图片](studio-byoi-attach.md)。

## 从控制台创建 SageMaker 镜像
<a name="studio-byoi-create-console"></a>

以下部分演示如何从 SageMaker AI 控制台创建自定义 SageMaker 镜像。

**创建镜像**

1. 打开 Amazon A SageMaker I 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在左侧导航窗格中，选择**管理员配置**。

1. 在**管理员配置**下，选择**映像**。

1. 在**自定义映像**页面上，选择**创建映像**。

1. 对于**映像源**，请输入 Amazon ECR 中容器映像的注册表路径。路径格式如下：

   ` acct-id.dkr.ecr.region.amazonaws.com/repo-name[:tag] or [@digest] `

1. 选择**下一步**。

1. 在**映像属性**下，输入以下内容：
   + 映像名称 - 该名称必须是您的账户在当前 AWS 区域中的唯一名称。
   + （可选）显示名称：Studio Classic 用户界面中显示的名称。如果未提供，则显示 `Image name`。
   + （可选）描述 – 对映像的描述。
   + IAM 角色-该角色必须附加[AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)策略。使用下拉菜单选择以下选项之一：
     + 创建新角色 – 指定您希望笔记本用户有权访问的任何其他 Amazon Simple Storage Service (Amazon S3) 存储桶。如果您不希望允许访问其他存储桶，请选择**无**。

       SageMaker AI 将`AmazonSageMakerFullAccess`策略附加到该角色上。该角色允许笔记本用户访问复选标记旁边列出的 S3 存储桶。
     + 输入自定义 IAM 角色 ARN - 输入 IAM 角色的 Amazon 资源名称 (ARN)。
     + 使用现有角色 – 从列表中选择一个现有角色。
   + （可选）映像标签 – 选择**添加新标签**。最多可以添加 50 个标签。可以使用 Studio Classic 用户界面、 SageMaker AI 控制台或 A `Search` I AP SageMaker I 搜索标签。

1. 选择**提交**。

新映像将显示在**自定义映像**列表中，并短暂高亮显示。成功创建映像后，您可以选择映像名称查看其属性，或选择**创建版本**创建另一个版本。

**创建另一个映像版本**

1. 在映像所在行中选择**创建版本**。

1. 对于**映像源**，请输入 Amazon ECR 容器映像的注册表路径。容器镜像不应与先前版本的镜像中使用的 SageMaker 镜像相同。

## 从中创建 SageMaker 图像 AWS CLI
<a name="studio-byoi-sdk-create-image"></a>

要使用容器 SageMaker 映像创建镜像，请执行以下步骤 AWS CLI。
+ 创建`Image`。
+ 创建`ImageVersion`。
+ 创建配置文件。
+ 创建`AppImageConfig`。

**创建 SageMaker 图像实体**

1. 创建 SageMaker 镜像。

   ```
   aws sagemaker create-image \
       --image-name custom-image \
       --role-arn arn:aws:iam::<acct-id>:role/service-role/<execution-role>
   ```

   响应内容应该类似于以下内容。

   ```
   {
       "ImageArn": "arn:aws:sagemaker:us-east-2:acct-id:image/custom-image"
   }
   ```

1. 根据容器 SageMaker 镜像创建镜像版本。

   ```
   aws sagemaker create-image-version \
       --image-name custom-image \
       --base-image <acct-id>.dkr.ecr.<region>.amazonaws.com/smstudio-custom:custom-image
   ```

   响应内容应该类似于以下内容。

   ```
   {
       "ImageVersionArn": "arn:aws:sagemaker:us-east-2:acct-id:image-version/custom-image/1"
   }
   ```

1. 检查映像版本是否创建成功。

   ```
   aws sagemaker describe-image-version \
       --image-name custom-image \
       --version-number 1
   ```

   响应内容应该类似于以下内容。

   ```
   {
       "ImageVersionArn": "arn:aws:sagemaker:us-east-2:acct-id:image-version/custom-image/1",
       "ImageVersionStatus": "CREATED"
   }
   ```
**注意**  
如果响应为 `"ImageVersionStatus": "CREATED_FAILED"`，则响应还包括失败原因。权限问题是导致失败的常见原因。如果您在启动或运行自定义图像的 KernelGateway 应用程序时遇到故障，也可以查看您的 Amazon CloudWatch 日志。日志组的名称为 `/aws/sagemaker/studio`。日志流的名称为 `$domainID/$userProfileName/KernelGateway/$appName`。

1. 创建一个名为 `app-image-config-input.json` 的配置文件。`KernelSpecs` 的 `Name` 值必须与此 `AppImageConfig` 关联的映像中可用的 kernelSpec 名称相匹配。此值区分大小写。您可以通过在容器内从 Shell 运行 `jupyter-kernelspec list` 来查找映像中可用的 kernelSpec。`MountPath` 是映像中挂载 Amazon Elastic File System (Amazon EFS) 主目录的路径。该路径必须与容器内使用的路径不同，因为在挂载 Amazon EFS 主目录时，该路径将被覆盖。
**注意**  
以下 `DefaultUID` 和 `DefaultGID` 组合是唯一可接受的值：  
 DefaultUID: 1000 和 DefaultGID: 100 
 DefaultUID: 0 和 DefaultGID: 0 

   ```
   {
       "AppImageConfigName": "custom-image-config",
       "KernelGatewayImageConfig": {
           "KernelSpecs": [
               {
                   "Name": "python3",
                   "DisplayName": "Python 3 (ipykernel)"
               }
           ],
           "FileSystemConfig": {
               "MountPath": "/home/sagemaker-user",
               "DefaultUid": 1000,
               "DefaultGid": 100
           }
       }
   }
   ```

1.  AppImageConfig 使用在上一步中创建的文件创建。

   ```
   aws sagemaker create-app-image-config \
       --cli-input-json file://app-image-config-input.json
   ```

   响应内容应该类似于以下内容。

   ```
   {
       "AppImageConfigArn": "arn:aws:sagemaker:us-east-2:acct-id:app-image-config/custom-image-config"
   }
   ```