关于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年客户体验与数据驱动产品开发教训。在业余时间,她喜爱读书、享受自然风光和陪伴家人。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理