乐趣区

关于ml:如何将您的自定义容器镜像导入Amazon-SageMaker-Studio-Notebooks

Amazon SageMaker Studio是第一套用于机器学习(ML)的全集成开发环境(IDE)。Amazon SageMaker Studio 可帮忙数据科学家们疾速启动 Studio notebooks 以摸索数据、构建模型、启动 Amazon SageMaker 训练作业并部署托管端点。Studio notebooks 中随附一组预构建镜像,这些镜像由 Amazon SageMaker Python SDK 与 IPython 运行时或内核的最新版本形成。凭借此项新性能,您能够轻松将自定义镜像导入 Amazon SageMaker notebooks 当中。在本文中,咱们将具体探讨如何将自定义容器镜像导入 Amazon SageMaker notebooks。

  • Amazon SageMaker Studio
    https://aws.amazon.com/sagema…
  • Amazon SageMaker Python SDK
    https://sagemaker.readthedocs…

开发人员与数据科学家个别须要在以下几种不同用例内应用自定义镜像:

  • 拜访风行机器学习框架(包含 TensorFlow、MXNet 以及 PyTorch 等)的特定或最新版本。
  • 将本地开发的自定义代码或算法引入 Studio notebooks 内以进行疾速迭代及模型训练。
  • 通过 API 拜访数据湖或本地数据存储,且管理员须要在镜像中增加相应驱动程序。
  • 拜访后端运行时(也称内核);除 IPython 之外,还有 R、Julia 或其它环境等。您也能够应用本文中概述的办法装置其余自定义内核。

在大型企业中,机器学习平台管理员往往须要保障平安团队事后批准第三方软件包及代码,而非间接通过互联网下载。在常见的工作流示例中,机器学习平台团队会批准一组要应用的软件包与框架,应用这些软件包构建自定义容器、测试容器中的破绽,而后将核准后的镜像推送至公有容器注册表内,例如 Amazon Elastic Container Registry(Amazon ECR)。当初,机器学习平台团队能够将通过核准的镜像间接附加至 Studio 域内(请参见以下工作流程图)。您只需在 Studio 中选定所需的获准自定义镜像即可。在以后版本中,繁多 Studio 域最多能够蕴含 30 个自定义镜像,您能够依据需要增加新版本或删除镜像。

  • Amazon ECR
    https://aws.amazon.com/ecr/

当初,咱们将逐渐介绍如何应用此项性能将自定义容器镜像导入 Amazon SageMaker Studio notebooks 当中。这里次要演示在互联网上应用时的默认办法,您也能够对其稍加批改以配合 Amazon Virtual Private Cloud(Amazon VPC)进行应用。

  • Amazon VPC
    https://aws.amazon.com/vpc/

先决条件

在开始之前,大家须要满足以下先决条件:

  • 亚马逊云科技账户。
  • 确保用于拜访 Amazon SageMaker 的角色领有以下 Amazon Web Services 身份与拜访治理(IAM)权限,使 Amazon SageMaker Studio 可能在 Amazon ECR 中以 smstudio 为前缀创立一个 repo,并面向此 repo 进行镜像推送与提取。要应用现有 repo,请将其中的 Resource 局部替换为您的 repo ARN。要构建容器镜像,您能够应用本地 Docker 客户端,或者间接在 Amazon SageMaker Studio 中创立镜像。本文采纳后一种办法。要在 Amazon ECR 内创立 repo,Amazon SageMaker Studio 须要应用Amazon CodeBuild;
  • Amazon CodeBuild:
    https://aws.amazon.com/codebu…

您还须要领有应用 Amazon CodeBuild 的权限,具体如下所示。

{
            "Effect": "Allow",
            "Action": [
                "ecr:CreateRepository",
                "ecr:BatchGetImage",
                "ecr:CompleteLayerUpload",
                "ecr:DescribeImages",
                "ecr:DescribeRepositories",
                "ecr:UploadLayerPart",
                "ecr:ListImages",
                "ecr:InitiateLayerUpload",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:PutImage"
            ],
            "Resource": "arn:aws:ecr:*:*:repository/smstudio*"
        },
        {
            "Effect": "Allow",
            "Action": "ecr:GetAuthorizationToken",
            "Resource": "*"
           }
{
            "Effect": "Allow",
            "Action": [
                "codebuild:DeleteProject",
                "codebuild:CreateProject",
                "codebuild:BatchGetBuilds",
                "codebuild:StartBuild"
            ],
            "Resource": "arn:aws:codebuild:*:*:project/sagemaker-studio*"
}
{
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringLikeIfExists": {"iam:PassedToService": "codebuild.amazonaws.com"}
            }
}

左右滑动查看更多

您的 Amazon SageMaker 角色还应在 Amazon CodeBuild 中领有信赖策略,具体如下所示。对于更多详细信息,请参阅 应用 Amazon SageMaker Studio 镜像构建 Amazon CLI 在 Studio notebooks 中构建容器镜像

  • 应用 Amazon SageMaker Studio 镜像构建 Amazon CLI 在 Studio notebooks 中构建容器镜像:
    https://aws.amazon.com/blogs/…
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": ["codebuild.amazonaws.com"]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

在您的本地机器上装置 Amazon Web Services 命令行界面(Amazon CLI)。对于详尽操作阐明,请参阅装置 Amazon Web Services。

  • 装置 Amazon Web Services:
    https://docs.aws.amazon.com/c…

筹备一个 Amazon SageMaker Studio 域。要创立此域,请应用 CreateDomain API 或者 create-domain CLI 命令。

  • CreateDomain API: 
    https://docs.aws.amazon.com/s…
  • create-domain CLI:
    https://docs.aws.amazon.com/c…

如果您心愿应用自有 Amazon VPC 以平安引入自定义容器,则须要实现以下操作:

带有专有子网的 Amazon VPC。

用于以下服务的 Amazon VPC 端点:

  • Amazon Simple Storage Service (Amazon S3)
    https://aws.amazon.com/s3/
  • Amazon SageMaker
  • Amazon ECR
  • Amazon Security Token Service (Amazon STS)
    https://docs.aws.amazon.com/S…
  • 用于构建 Docker 容器的 Amazon CodeBuild

要设置上述资源,请参阅应用 专用 Amazon VPC 爱护 Amazon SageMaker Studio 连贯 以及相干GitHub repo

  • 专用 Amazon VPC 爱护 Amazon SageMaker Studio 连贯:
    https://aws.amazon.com/blogs/…
  • GitHub repo:
    https://github.com/aws-sample…

创立 Amazon Dockerfile

为了体现数据科学家应用最新框架进行试验的普遍性需要,咱们在本次演练中应用以下 Amazon Dockerfile,其抉择最新的 TensorFlow 2.3 版本作为根底镜像。您也能够应用本人指定的 Amazon Dockerfile 进行替换。目前,Amazon SageMaker Studio 曾经可能反对多种根底镜像,例如 Ubuntu、Amazon Linux 2 等等。Amazon Dockerfile 将装置运行 Juypter notebooks 所须要的 IPython 运行时,同时装置 Amazon SageMaker Python SDK 与 boto3。

除了笔记本电脑之外,除了 notebooks 之外,数据科学家与机器学习工程师们还常常应用各种风行 IDE(例如 Visual Studio Code 或者 PyÇharm)在本地 notebooks 上进行迭代与试验。您可能心愿将这些脚本引入云端,借此进行扩大化训练或数据处理。您能够将这些脚本打包进 Docker 容器之内,并在 Amazon SageMaker Studio 的本地存储中查看。在以下 Amazon Dockerfile 中,咱们复制的 train.py 脚本是一套用于在 MNIST 数据集上训练简略深度学习模型的根底脚本。您也能够应用本人的脚本或蕴含代码的软件包替换此脚本:

FROM tensorflow/tensorflow:2.3.0
RUN apt-get update 
RUN apt-get install -y git
RUN pip install --upgrade pip
RUN pip install ipykernel && \
    python -m ipykernel install --sys-prefix && \
    pip install --quiet --no-cache-dir \
    'boto3>1.0<2.0' \
    'sagemaker>2.0<3.0'

左右滑动查看更多

COPY train.py /root/train.py #能够替换为您的自定义脚本或软件包

以下代码为 train.py 脚本:

import tensorflow as tf
import os 

mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=1)
model.evaluate(x_test, y_test)

左右滑动查看更多

除了自定义脚本之外,您也能够增加其余文件,例如可通过 Amazon Secrets ManagerAmazon Systems Manager Parameter Store拜访客户端 secrets 以及环境变量的 Python 文件、用于连贯公有 PyPi repo 的 config 文件、或者其余软件包管理工具。您也能够应用自定义镜像复制脚本,但在这种状况下,Amazon Dockerfile 中的所有 Entrypoint 或 CMD 命令均无奈运行。

  • Amazon Secrets Manager:
    https://aws.amazon.com/secret…
  • Amazon Systems Manager Parameter Store:
    https://docs.aws.amazon.com/s…

设置装置文件夹

您须要在本地机器上创立一个文件夹,并向其中增加以下文件:

  • 在上一步中创立实现的 Amazon Dockerfile。
  • 名为 app-image-config-input.json 的文件,具体内容如下:
"AppImageConfigName": "custom-tf2",
    "KernelGatewayImageConfig": {
        "KernelSpecs": [
            {
                "Name": "python3",
                "DisplayName": "Python 3"
            }
        ],
        "FileSystemConfig": {
            "MountPath": "/root/data",
            "DefaultUid": 0,
            "DefaultGid": 0
        }
    }
}

咱们将此 Amazon Dockerfile 的后端内核设置为 IPython 内核,并提供指向 Amazon Elastic File System(Amazon EFS) 的挂载门路。Amazon SageMaker 能够辨认出 Juypter 定义的内核。例如,对于 R 内核,您能够将之前代码中的 Name 局部设置为 ir。请留神保障其中的 Uid、Gid 以及内核名称与 Docker 镜像中的 kernelspecs 及用户信息相匹配。要获取这些值,请参阅本 文档

  • Amazon Elastic File System
    https://aws.amazon.com/efs/
  • 文档
    https://github.com/aws-sample…

应用以下内容创立一个名为 default-user-settings.json 的文件。如果您须要增加多个自定义镜像,请间接将其增加至 CustomImages 列表。

{
  "DefaultUserSettings": {
    "KernelGatewayAppSettings": {
      "CustomImages": [
          {
                   "ImageName": "tf2kernel",
                   "AppImageConfigName": "custom-tf2"
                }
            ]
        }
    }
}

左右滑动查看更多

创立镜像并将其附加至您的 Studio 域

如果您曾经领有现成的域,则间接应用新镜像进行更新即可。在本节中,咱们将演示现有 Studio 用户如何进行镜像附加。对于启动新用户的阐明,请参阅 应用 IAM 登入 Amazon SageMaker Studio

  • 应用 IAM 登入 Amazon SageMaker Studio
    https://docs.aws.amazon.com/s…

首先,咱们应用 Amazon SageMaker Studio Docker 构建 Amazon CLI 构建 Amazon Dockerfile,并将其推送至 Amazon ECR。请留神,您也能够应用其余办法将容器推送至 Amazon ECR,例如通过本地 Docker 客户端以及 Aamzon CLI。

  • 应用您的用户信息登录至 Studio。
  • 将您的 Amazon Dockerfile、以及其余须要复制到容器当中的代码或依赖项上传至 Studio 域。
  • 导航至蕴含 Amazon Dockerfile 的文件夹。
  • 在终端窗口或 notebook 内 —>
!pip install sagemaker-studio-image-build
  • 导出一个名为 IMAGE_NAME 的变量,并将其设定为您在 default-user-settings.json 当中所指定的值。

sm-docker build . –repository smstudio-custom:IMAGE_NAME

  • 如果要应用其余 repo,请将以上代码中的 smstudio-custom 替换为您的 repo 名称。

Amazon SageMaker Studio 将为您构建 Docker 镜像,将该镜像推送至 Amazon ECR 当中一个名为 smstudio-custom 的 repo 内,并为其标记适当的镜像名称。要进一步自定义此项性能(例如提供具体的文件门路或其余选项),请参阅 应用 Amazon SageMaker Studio 镜像构建 Amazon CLI 在 Studio notebooks 中构建容器镜像。要让以上 pip 命令在专用 Amazon VPC 环境下起效,您须要设置互联网路由或拜访专用 repo 内的相应软件包。

  • 应用 Amazon SageMaker Studio 镜像构建 Amazon CLI 在 Studio notebooks 中构建容器镜像
    https://aws.amazon.com/blogs/…
  • 在之前的装置文件夹中,创立一个名为 create-and-update-image.sh 的新文件:
ACCOUNT_ID=AWS ACCT ID # 替换为您的 AWS 账户 ID
REGION=us-east-2 # 替换为您的区域
DOMAINID=d-####### # 替换为您的 SageMaker Studio 域名称
IMAGE_NAME=tf2kernel # 替换为您的镜像名称

# 应用 Amazon SageMaker Studio
## 应用 ECR 中的镜像创立 SageMaker 镜像(依据需要批改镜像名称)ROLE_ARN='The Execution Role ARN for the execution role you want to use'

aws --region ${REGION} sagemaker create-image \
    --image-name ${IMAGE_NAME} \
    --role-arn ${ROLE_ARN}

aws --region ${REGION} sagemaker create-image-version \
    --image-name ${IMAGE_NAME} \
    --base-image "${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/smstudio-custom:${IMAGE_NAME}"

## 为此镜像创立 AppImageConfig(依据须要批改 app-image-config-input.json 中的 AppImageConfigName 与 KernelSpecs 参数)aws --region ${REGION} sagemaker create-app-image-config --cli-input-json file://app-image-config-input.json

## 提供镜像与 AppImageConfig 以更新此域
aws --region ${REGION} sagemaker update-domain --domain-id ${DOMAINID} --cli-input-json file://default-user-settings.json

左右滑动查看更多

请参阅 Amazon CLI 以理解可在 create-image API 中应用的各项参数的详细信息。要查看以后状态,请导航至您的 Amazon SageMaker 控制台,并在导航面板中抉择 Amazon SageMaker Studio。

应用 Studio UI 附加镜像

您也能够通过 UI 实现将镜像附加至 Studio 域的最初一步。在此用例中,UI 将解决镜像与镜像版本的创立操作,并应用附加的镜像实现域更新。

  • 在 Amazon SageMaker 管制台上,抉择 Amazon SageMaker Studio。

在 Control Panel 页面上,能够看到曾经置备实现的 Studio 域以及您所创立的所有用户配置。

  • 抉择Attach image

  • 抉择要附加新镜像,还是附加原有镜像。

a. 如果您抉择 Existing image,请从 Amazon SageMaker 镜像库中抉择一个镜像。

b. 如果您抉择 New image,请提供 Docker 镜像的 Amazon ECR 注册表门路。此门路须要与 Studio 域处于同一区域内。Amazon ECR repo 还须要与您的 Studio 域处于同一账户内;如果须要跨账户操作,则 Studio 必须具备相应权限。

  • 抉择 Next

  • Image name 局部,输出名称。
  • Image display name 局部,输出描述性名称。
  • Description 局部,输出标签定义。
  • 在 IAM role 局部,抉择 Amazon SageMaker 用于向 Amazon SageMaker 镜像附加 Amazon ECR 镜像的 IAM 角色。
  • 此外,您也能够对镜像做出其余标记。
  • 抉择Next

  • 在 Kernel name 局部,输出 Python 3。
  • 抉择Submit

绿色复选框代表镜像已被胜利附加至域内。

Amazon SageMaker 镜像存储将主动对镜像进行版本控制。您能够抉择一个事后附加的镜像,而后抉择 Detach 以拆散该镜像及所有相干版本,或者抉择 Attach image 以附加新版本。各镜像的版本数量或拆散镜像的性能不受限制。

自定义镜像用户体验

上面,咱们尝试 Studio 的理论用户体验。

  • 应用您的用户材料登录至 Studio。
  • 要启动新流动,请抉择 Launcher
  • Select a Amazon SageMaker image to launch your activity 局部,抉择 tf2kernel

  • 抉择 Notebook 图标,应用自定义内核关上一个新 notebook。

Notebook 内核须要几分钟能力启动实现,之后即可开始应用!

在 Notebook 中测试您的自定义容器

在内核启动并开始运行之后,您即可在 notebook 中运行代码。首先,咱们测试 Amazon Dockerfile 中指定的 TensorFlow 是否为正确版本。在以下截屏中,能够看到咱们刚刚创立的 notebook 正在应用 tf2kernel。

Amazon SageMaker notebooks 还会显示本地 CPU 与内存使用量。

接下来,咱们间接在 notebook 中应用自定义训练脚本。将训练脚本复制到 notebook 单元中并运行。此脚本会从 tf.keras.datasets 处下载 mnist 数据集,并将数据拆分为训练数据集与测试数据集,自定义一项定制化深度神经网络算法,在训练数据集上训练算法,并在测试数据集上测试算法。

要尝试应用 TensorFlow 2.3 框架,大家可能心愿测试新公布的 API,例如 Keras 中提供的预处理实用程序等新性能。在以下截屏中,咱们导入了随 TensorFlow 2.3 版本公布的 keras.layers.experimental 库,其中蕴含用于数据预处理的新 API。咱们加载其中一个 API,而后在 notebook 中从新运行脚本。

Amazon SageMaker 还可能在代码运行过程中动静批改 CPU 与内存使用率。通过引入自定义容器与训练脚本,此性能使您可能间接在 Amazon SageMaker notebook 中尝试自定义训练脚本与算法。如果您对 Studio notebook 中的试验后果感到称心,则可立刻启动训练作业。

Docker file 中所蕴含的、应用 COPY 命令的 Python 文件或其余自定义文件运行状况如何?Amazon SageMaker Studio 会挂载 app-image-config-input.json 所提供的文件门路中的弹性文件系统,在本示例中咱们将其设定为 root/data。为了防止 Studio 笼罩掉须要蕴含的自定义文件,COPY 命令会将 train.py 文件加载至门路 /root 当中。要拜访此文件,请关上终端或 notebook 并运行以下代码:

! cat /root/train.py

这时您应看到以下截屏所示的输入后果。

能够看到 train.py 文件位于指定地位。

Amazon CloudWatch 中的日志记录

Amazon SageMaker Studio 还会将内核指标公布至 Amazon CloudWatch 供您进行故障排查。这些指标将被捕获至 /aws/sagemaker/studio 命名空间之内。

要拜访日志,请在 Amazon CloudWatch 管制台上抉择 Amazon CloudWatch Logs。在 Log groups 页面中,输出命名空间以查看与 Jupyter 服务器及内核网关相干的日志记录。

拆散镜像或版本

您能够从域中拆散镜像或特定镜像版本。

要拆散镜像及其全副版本,请在 Custom images attached to domain 表内选定该镜像,而后抉择 Detach。

您还能够抉择删除镜像及所有版本,这不会影响到 Amazon ECR 中的镜像。

要拆散镜像的特定版本,请选定该镜像。在 Image details 页面上,从 Image versions attached to domain 表中抉择指标镜像版本(一个或者多个版本),而后抉择 Detach。您会看到如上所示的正告及操作选项。

总结

Amazon SageMaker Studio 使您可能更轻松地对机器学习模型进行合作、试验、训练及部署。在这之前,数据科学家往往须要通过公共及公有代码 repo 以及软件包管理工具能力拜访最新机器学习框架、自定义脚本以及软件包。当初,您能够将所有相干代码打包进自定义镜像之内,并应用 Studio notebook 启动这些镜像。这些镜像可供 Studio 域内的所有用户应用。您也能够应用此项性能应用 Python 之外的其余风行语言及运行时,包含 R、Julia 以及 Scala 等。您能够在 GitHub repo 中找到示例文件。对于此项性能的更多详细信息,请参阅 自带 Amazon SageMaker 镜像

  • GitHub repo
    https://github.com/aws-sample…
  • 自带 Amazon SageMaker 镜像
    https://docs.aws.amazon.com/s…

本篇作者


Stefan Natu
亚马逊云科技公司高级机器学习专家
致力于帮忙金融服务客户在亚马逊云科技上构建端到端机器学习解决方案。在业余时间,他喜爱浏览机器学习技术博客、演奏吉他和摸索纽约当地的各种美食。


Jaipreet Singh
Amazon SageMaker Studio 团队高级软件工程师
自 2017 年立项以来就始终从事 Amazon SageMaker 的开发工作,并为多个 Jupyter 开源我的项目做出奉献。业余时间,他喜爱远足和滑雪。


Huong Nguyen
亚马逊云科技公司高级产品经理
负责 Amazon SageMaker Studio 的用户体验工作。她在企业级及生产级畛域领有 13 年客户体验与数据驱动产品开发教训。在业余时间,她喜爱读书、享受自然风光和陪伴家人。

退出移动版