通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。

通过一键式 Kubeflow on AWS 部署在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流程

如今,许多 AWS 客户正在构建企业级机器学习 (ML) 平台 Amazon Elastic Kubernetes服务 (亚马逊 EKS)使用 AWS 上的 Kubeflow (Kubeflow 的 AWS 特定发行版)跨越许多用例,包括计算机视觉、自然语言理解、语音翻译和金融建模。

随着 最新发布的开源 Kubeflow v1.6.1,Kubeflow 社区继续支持企业用例大规模采用 Kubeflow。 最新版本包括许多令人兴奋的新功能,例如支持 Kubernetes v1.22,结合用于 PyTorch 的 Python SDK、MXNet、MPI、Kubeflow 分布式训练运算符中的 XGBoost、用于模型服务的新 ClusterServingRuntime 和 ServingRuntime CRD 等等。

AWS 对 Kubeflow 的贡献最近在 AWS 1.6.1 上推出了 Kubeflow,它支持所有上游开源 Kubeflow 功能,并包括许多与高度优化、云原生、企业就绪的 AWS 服务的新集成,这些服务将帮助您构建高度可靠、安全、便携和可扩展的 ML 系统。

在这篇文章中,我们讨论了 AWS v1.6.1 上的新 Kubeflow 功能,并强调了捆绑在一个平台上的三个重要集成,可为您提供:

本博客中的用例将特别关注 SageMaker 与 AWS 上的 Kubeflow 的集成,可以将其添加到您现有的 Kubernetes 工作流中,从而使您能够构建混合机器学习架构。

AWS 上的 Kubeflow

AWS 1.6.1 上的 Kubeflow 提供了使用 Kubeflow 的清晰路径,并在现有功能之上添加了以下 AWS 服务:

  • SageMaker 与 Kubeflow 集成,使用 SageMaker Operators for Kubernetes (ACK) 和 SageMaker Components for Kubeflow Pipelines 运行混合机器学习工作流。
  • 使用 Kustomize 脚本和 Helm 图表改进和简化了自动化部署选项。
  • 添加了对基础设施即代码 (IaC) 的支持,使用 Terraform 在 AWS 上为 Kubeflow 一键部署所有可用的 部署选项. 此脚本自动创建以下 AWS 资源:
  • 经验 AWS私有链接 适用于 Amazon S3,使非商业区域用户能够连接到他们各自的 S3 端点。
  • 添加了集成 亚马逊普罗米修斯托管服务 (AMP) 和 亚马逊托管 Grafana 在 AWS 上使用 Kubeflow 监控指标。
  • 使用基于 TensorFlow 2.10.0 和 PyTorch 1.12.1 的最新深度学习容器映像更新了 Kubeflow 笔记本服务器容器。
  • 与 AWS DLC 集成以运行分布式 训练推理 工作量。

以下架构图是可用于 AWS 上的 Kubeflow 控制和数据平面组件的所有服务集成(包括已经提到的那些)的快速快照。 Kubeflow 控制平面安装在 Amazon EKS 之上,这是一种托管容器服务,用于在云中运行和扩展 Kubernetes 应用程序。 这些 AWS 服务集成使您能够将 Kubeflow 控制平面的关键部分与 Kubernetes 分离,从而提供安全、可扩展、有弹性且成本优化的设计。 有关这些服务集成为开源 Kubeflow 添加的价值的更多详细信息,请参阅 使用 AWS 上的 Kubeflow 在 Kubernetes 上构建和部署可扩展的机器学习系统.

让我们更详细地讨论 Kubeflow on AWS 1.6.1 的主要功能如何对您的组织有所帮助。

AWS 上的 Kubeflow 功能详细信息

在 Kubeflow 1.6.1 版本中,我们试图为不同类型的客户提供更好的工具,无论您选择哪种选项,都可以轻松开始使用 Kubeflow。 这些工具提供了一个很好的起点,并且可以进行修改以满足您的具体需求。

部署选项

我们为不同的客户用例提供不同的部署选项。 在这里,您可以选择要将 Kubeflow 部署与哪些 AWS 服务集成。 如果您决定稍后更改部署选项,我们建议您为新部署执行全新安装。 以下部署选项可用:

如果您想以最少的更改部署 Kubeflow,请考虑 香草 部署选项。 所有可用的部署选项都可以使用 Kustomize、Helm 或 Terraform 安装。

我们还有不同的附加部署,可以安装在这些部署选项之上:

安装选项

在确定了最适合您需要的部署选项后,您可以选择安装这些部署的方式。 为了同时为专家和新手提供服务,我们采用了不同级别的自动化和配置。

选项 1:Terraform (IaC)

这将创建一个 EKS 集群和所有相关的 AWS 基础设施资源,然后使用 Terraform 在一个命令中部署 Kubeflow。 在内部,这使用 EKS 蓝图和 Helm 图表。

此选项具有以下优点:

  • 它为企业提供了灵活性,可以通过一条命令部署 Amazon EKS 和 Kubeflow,而无需担心特定的 Kubeflow 组件配置。 这将极大地帮助加快技术评估、原型设计和产品开发生命周期,提供使用 Terraform 模块和修改它以满足任何项目特定需求的灵活性。
  • 如今,许多将 Terraform 作为其云战略中心的组织现在可以使用 Kubeflow on AWS Terraform 解决方案来实现其云目标。

选项 2:Kustomize 或 Helm 图表:

此选项允许您分两步部署 Kubeflow:

  1. 通过 AWS 发行版中包含的自动化脚本或手动遵循 一步一步的指导.
  2. 使用 Helm 图表或 Kustomize 安装 Kubeflow 部署。

此选项具有以下优点:

  • 此安装选项的主要目标是提供与 Kubeflow 相关的 Kubernetes 配置。 因此,您可以选择创建或引入现有的 EKS 集群或任何相关的 AWS 资源,如 Amazon RDS、Amazon S3 和 Amazon Cognito,并配置和管理它以与 AWS 上的 Kubeflow 一起使用。
  • 从开源 Kustomize Kubeflow 清单迁移到 AWS Kubeflow 分布更容易。

下图说明了这两个选项的体系结构。

通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。

与 SageMaker 集成

SageMaker 是一项完全托管的服务,专为管理 ML 工作流而设计和优化。 它消除了基础设施管理的无差别繁重工作,并且无需投资 IT 和 DevOps 来管理用于 ML 模型构建、训练和推理的集群。

许多有可移植性要求或本地标准限制的 AWS 客户使用 Amazon EKS 来设置可重复的 ML 管道来运行训练和推理工作负载。 然而,这需要开发人员编写自定义代码来优化底层 ML 基础架构,提供高可用性和可靠性,并遵守适当的安全和法规要求。 因此,这些客户希望将 SageMaker 用于模型训练和部署的成本优化和托管基础设施,并继续使用 Kubernetes 进行编排和 ML 管道以保持标准化和可移植性。

为满足这一需求,AWS 允许您使用以下两个选项从 Amazon EKS 在 SageMaker 中训练、调整和部署模型:

  • Amazon SageMaker ACK Operators for Kubernetes,基于 适用于 Kubernetes 的 AWS 控制器 (ACK) 框架。 ACK 是 AWS 策略,它引入了构建 Kubernetes 自定义控制器的标准化,允许 Kubernetes 用户通过使用 Kubernetes API 来配置数据库或消息队列等 AWS 资源。 SageMaker ACK Operators 使使用 Kubernetes 作为控制平面的 ML 开发人员和数据科学家可以更轻松地在 SageMaker 中训练、调整和部署 ML 模型,而无需登录 SageMaker 控制台。
  • 用于Kubeflow管道的SageMaker组件,它允许您将 SageMaker 与 Kubeflow Pipelines 的可移植性和编排功能相集成。 使用 SageMaker 组件,管道工作流中的每个作业都在 SageMaker 而不是本地 Kubernetes 集群上运行。 这允许您从 Kubeflow 管道创建和监控本地 SageMaker 训练、调整、端点部署和批量转换作业,从而允许您将包括数据处理和训练作业在内的完整计算从 Kubernetes 集群移动到 SageMaker 的机器学习优化托管服务。

从 AWS v1.6.1 上的 Kubeflow 开始,所有可用的 Kubeflow 部署选项默认将两个 Amazon SageMaker 集成选项结合在一个平台上。 这意味着,您现在可以使用 SageMaker ACK 运算符从 Kubeflow 笔记本服务器本身提交自定义 SageMaker 资源或使用 SageMaker 组件从 Kubeflow 管道步骤提交 SageMaker 作业。

SageMaker 组件有两个版本 – 博托3 (适用于 Python 的 AWS 开发工具包的 AWS 开发工具包)基于版本 1 的组件和基于 SageMaker Operator for K8s (ACK) 的版本 2 组件。 新的 SageMaker 组件版本 2 支持最新的 SageMaker 培训 api,我们将继续向该版本的组件添加更多 SageMaker 功能。 但是,您可以灵活地将 Sagemaker 组件版本 2 用于训练,将版本 1 用于其他 SageMaker 功能,例如超参数调整、处理作业、托管等。

与 Prometheus 和 Grafana 集成

Prometheus 是一种开源指标聚合工具,您可以将其配置为在 Kubernetes 集群上运行。 在 Kubernetes 集群上运行时,主 Prometheus 服务器会定期抓取 pod 端点。

Kubeflow 组件,例如 Kubeflow Pipelines (KFP) 和 Notebook,发出 Prometheus 指标以允许监控组件资源,例如运行实验的数量或笔记本计数。

这些指标可以由在 Kubernetes 集群中运行的 Prometheus 服务器聚合,并使用 Prometheus 查询语言 (PromQL) 进行查询。 有关 Prometheus 支持的功能的更多详细信息,请查看 普罗米修斯文档.

Kubeflow on AWS 发行版支持与以下 AWS 托管服务的集成:

  1. Amazon Managed Prometheus (AMP) 是一个 普罗米修斯兼容的容器基础设施监控服务和容器应用指标,使客户可以轻松安全地大规模监控容器环境。 使用 AMP,您可以对从可观察性系统中的多个数据源(包括 AWS、第三方 ISV 和 IT 产品组合中的其他资源)收集的指标、日志和跟踪进行可视化、分析和警报。
  2. Amazon Managed Grafana,一个基于开源的完全托管和安全的数据可视化服务 格拉法纳 项目,使客户能够即时查询、关联和可视化来自多个数据源的应用程序的操作指标、日志和跟踪。 Amazon Managed Grafana 通过随着使用需求的增加自动扩展计算和数据库基础设施,以及自动版本更新和安全补丁,从而减轻了 Grafana 的运营管理负担。

Kubeflow on AWS 发行版为 Amazon Managed Service for Prometheus 和 Amazon Managed Grafana 的集成提供支持,以促进 Prometheus 指标的大规模安全摄取和可视化。

以下指标被摄取并可以可视化:

  • 从 Kubeflow 组件(例如 Kubeflow 管道和笔记本服务器)发出的指标
  • Kubeflow 控制平面指标

要为您的 Kubeflow 集群配置 Amazon Managed Service for Prometheus 和 Amazon Managed Grafana,请参阅 使用 Prometheus、Amazon Managed Service for Prometheus 和 Amazon Managed Grafana 通过 Kubeflow on AWS 监控指标.

解决方案概述

在此用例中,我们使用使用 Terraform 安装选项的 Kubeflow vanilla 部署。 安装完成后,我们登录到 Kubeflow 仪表板。 在仪表板上,我们启动了一个 Kubeflow Jupyter 笔记本服务器来构建一个 Kubeflow 管道,该管道使用 SageMaker 为图像分类模型运行分布式训练,并使用 SageMaker 端点进行模型部署。

先决条件

确保您满足以下先决条件:

  • 你有一个 AWS账户.
  • 确保您在 us-west-2 运行此示例的区域。
  • 使用谷歌浏览器与 AWS管理控制台 和库贝流。
  • 使用 Service Quotas 控制台确保您的账户将 ml.p3.2xlarge 的 SageMaker 培训资源类型限制增加到 2。
  • 或者,您可以使用 AWS 云9,一个基于云的集成开发环境 (IDE),可以通过 Web 浏览器完成所有工作。 有关设置说明,请参阅 设置 Cloud9 IDE. 在 AWS Cloud18.04 设置中选择 Ubuntu Server 9 作为平台。通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。然后从您的 AWS Cloud9 环境中,选择加号并打开新终端。

您还配置了一个 AWS命令行界面 (AWS CLI) 配置文件。 为此,您需要一个访问密钥 ID 和秘密访问密钥 AWS身份和访问管理 (我是) 用户 具有管理权限(附加现有托管策略)和编程访问权限的帐户。 请参阅以下代码:

aws configure --profile=kubeflow

AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: us-west-2
Default output format [None]: json

# (In Cloud9, select “Cancel” and “Permanently disable” when the AWS managed temporary credentials dialog pops up)

export AWS_PROFILE=kubeflow

验证 cloud9 将用于调用 AWS 资源的权限。

aws sts get-caller-identity

从以下输出中验证您是否看到您在 AWS CLI 配置文件中配置的管理员用户的 arn。 在这个例子中它是“kubeflow-user”

{
    "UserId": "*******",
    "Account": "********",
    "Arn": "arn:aws:iam::*******:user/kubeflow-user"
}

在 AWS 上安装 Amazon EKS 和 Kubeflow

要在 AWS 上安装 Amazon EKS 和 Kubeflow,请完成以下步骤:

  1. 设置用于在 AWS 上部署 Kubeflow 的环境:
    #Clone the awslabs/kubeflow-manifests and the kubeflow/manifests repositories and check out the release branches of your choosing
    export KUBEFLOW_RELEASE_VERSION=v1.6.1
    export AWS_RELEASE_VERSION=v1.6.1-aws-b1.0.0
    git clone https://github.com/awslabs/kubeflow-manifests.git && cd kubeflow-manifests
    git checkout ${AWS_RELEASE_VERSION}
    git clone --branch ${KUBEFLOW_RELEASE_VERSION} https://github.com/kubeflow/manifests.git upstream
    
    export MANIFEST_DIR=$PWD

    #Install the necessary tools with the following command:
    make install-tools
    source ~/.bash_profile

  2. 使用 Terraform 在 AWS 和相关 AWS 资源(如 EKS)上部署原始版本的 Kubeflow。 请注意,EKS 节点组中使用的 EBS 卷在默认情况下未加密:
    #Define the following environment variables
    
    #Region to create the cluster in
    export CLUSTER_REGION=us-west-2
    #Name of the cluster to create
    export CLUSTER_NAME=

    cd deployments/vanilla/terraform
    
    #Save the variables to a .tfvars file
    cat < sample.auto.tfvars
    cluster_name="${CLUSTER_NAME}"
    cluster_region="${CLUSTER_REGION}"
    EOF
    
    #Run the following one-click command to deploy terraform to install EKS infrastructure and Kubeflow
    make deploy

设置 Kubeflow 权限

  1. 向 Notebook pod 和 Pipeline component pod 添加权限以使用以下方式调用 SageMaker、S3 和 IAM api kubeflow_iam_permissions.sh 脚本。
    export NAMESPACE=kubeflow-user-example-com
    
    wget https://raw.githubusercontent.com/aws-samples/eks-kubeflow-cloudformation-quick-start/9e46662d97e1be7edb0be7fc31166e545655636a/utils/kubeflow_iam_permissions.sh
    chmod +x kubeflow_iam_permissions.sh
    ./kubeflow_iam_permissions.sh $NAMESPACE $CLUSTER_NAME $CLUSTER_REGION

  2. 创建 SageMaker 执行角色,使 SageMaker 训练作业能够使用 S3 服务访问训练数据集 sagemaker_role.sh 脚本。
    wget https://raw.githubusercontent.com/aws-samples/eks-kubeflow-cloudformation-quick-start/9e46662d97e1be7edb0be7fc31166e545655636a/utils/sagemaker_role.sh
    chmod +x sagemaker_role.sh
    ./sagemaker_role.sh

访问 Kubeflow 仪表板

要访问 Kubeflow 仪表板,请完成以下步骤:

  1. 您可以在 Cloud9 环境中本地运行 Kubeflow 仪表板,而无需通过运行以下命令将您的 URL 暴露给公共互联网。
    # Configure Kubecontext
    $(terraform output -raw configure_kubectl)
    
    cd ${MANIFEST_DIR}
    make port-forward

  2. 预览正在运行的应用程序.通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。
  3. 选择 Kubeflow 仪表板一角的图标,将其作为 Chrome 中的单独选项卡打开。
  4. 输入默认凭据(user@example.com/12341234) 登录到 Kubeflow 仪表板。通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。

在 AWS 环境中设置 Kubeflow

登录到 Kubeflow 仪表板后,请确保您拥有正确的命名空间 (kubeflow-user-example-com)选择。 完成以下步骤以设置您的 Kubeflow on AWS 环境:

  1. 在 Kubeflow 仪表板上,选择 笔记本电脑 在导航窗格中。
  2. 新笔记本.
  3. 针对 名字,输入 aws-nb.
  4. 针对 Jupyter 案卷图像, 选择图像 jupyter-pytorch:1.12.0-cpu-py38-ubuntu20.04-ec2-2022-09-20 (最新可用 jupyter-pytorch DLC图像)。
  5. 针对 中央处理器,输入 1.
  6. 针对 内存,输入 5.
  7. 针对 图形处理器, 离开为 不包含.
  8. 不要对 工作区数据量 部分。通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。
  9. 选择 允许访问 Kubeflow Pipelines ,在 配置结构图 部分并选择启动。通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。
  10. 验证您的笔记本是否已成功创建(可能需要几分钟)。通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。
  11. 分享链接 登录 JupyterLab。
  12. 通过输入克隆回购 https://github.com/aws-samples/eks-kubeflow-cloudformation-quick-start.git ,在 克隆一个仓库 领域。
  13. 克隆.通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。

运行分布式训练示例

设置 Jupyter 笔记本后,您可以使用文件夹中的以下高级步骤运行整个演示 eks-kubeflow-cloudformation-quick-start/workshop/pytorch-distributed-training 在克隆的存储库中:

  1. 运行 PyTorch 分布式数据并行 (DDP) 训练脚本 – 参考PyTorch DDP训练脚本 cifar10-distributed-gpu-final.py,其中包括示例卷积神经网络和在多节点 CPU 和 GPU 集群上分发训练的逻辑。
  2. 创建 Kubeflow 流水线 – 运行笔记本 STEP1.0_create_pipeline_k8s_sagemaker.ipynb 创建在 SageMaker 上运行和部署模型的管道。 确保将 SageMaker 库安装为第一个笔记本单元的一部分,并在运行其余笔记本单元之前重新启动内核。
  3. 调用 SageMaker 端点 – 运行笔记本 STEP1.1_invoke_sagemaker_endpoint.ipynb 调用和测试在上一个笔记本中创建的 SageMaker 模型推理端点。

在随后的部分中,我们将详细讨论这些步骤中的每一个。

运行 PyTorch DDP 训练脚本

作为分布式训练的一部分,我们训练了一个由在 CIFAR10 数据集上运行的简单卷积神经网络创建的分类模型。 训练脚本 cifar10-distributed-gpu-final.py 仅包含开源库,并且兼容在 GPU 设备或 CPU 实例上的 Kubernetes 和 SageMaker 训练集群上运行。 在运行笔记本示例之前,让我们先看看训练脚本的几个重要方面。

我们使用 torch.distributed 模块,其中包含 PyTorch 支持和通信原语,用于集群中跨节点的多进程并行:

...
import torch
import torch.distributed as dist
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.utils.data
import torch.utils.data.distributed
import torchvision
from torchvision import datasets, transforms
...

我们使用卷积层、最大池化层和线性层的组合创建一个简单的图像分类模型,其中 relu 激活函数应用于模型训练的前向传播:

# Define models
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)

def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 16 * 5 * 5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x

如果训练集群有 GPU,则脚本在 CUDA 设备上运行训练,并且 device 变量保存默认的 CUDA 设备:

device = "cuda" if torch.cuda.is_available() else "cpu"
...

在使用 PyTorch 运行分布式训练之前 DistributedDataParallel 要在多个节点上运行分布式处理,您需要通过调用初始化分布式环境 init_process_group. 这是在训练集群的每台机器上初始化的。

dist.init_process_group(backend=args.backend, rank=host_rank, world_size=world_size)
...

我们实例化分类器模型并将模型复制到目标设备。 如果启用分布式训练以在多个节点上运行,则 DistributedDataParallel 类用作模型对象的包装对象,允许跨多台机器进行同步分布式训练。 输入数据在批次维度上被拆分,模型的副本被放置在每台机器和每台设备上。 请参见以下代码:

model = Net().to(device)

if is_distributed:
model = torch.nn.parallel.DistributedDataParallel(model)

...

创建 Kubeflow 流水线

笔记本使用了 Kubeflow管道SDK 及其提供的一组 Python 包,用于指定和运行 ML 工作流管道。 作为此 SDK 的一部分,我们使用领域特定语言 (DSL) 包装饰器 dsl.pipeline,它修饰 Python 函数以返回管道。

Kubeflow 管道使用 SageMaker 组件 V2,使用 SageMaker ACK 运算符将训练提交给 SageMaker。 SageMaker 模型创建和模型部署使用 SageMaker 组件 V1,它是基于 Boto3 的 SageMaker 组件。 我们在此示例中结合使用了这两个组件,以展示您在选择方面的灵活性。

  1. 使用以下代码加载 SageMaker 组件:
    # Loads SageMaker training components v2 for Kubeflow pipeline from the URL
    sagemaker_train_ack_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/d4aaa03035f221351ebe72fbd74fcfccaf25bb66/components/aws/sagemaker/TrainingJob/component.yaml')
    
    # Loads SageMaker components v1 for Kubeflow pipeline from the URL
    sagemaker_model_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/cb36f87b727df0578f4c1e3fe9c24a30bb59e5a2/components/aws/sagemaker/model/component.yaml')
    sagemaker_deploy_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/cb36f87b727df0578f4c1e3fe9c24a30bb59e5a2/components/aws/sagemaker/deploy/component.yaml')

    在以下代码中,我们创建了 Kubeflow 管道,我们在其中使用两个运行 SageMaker 分布式训练 ml.p3.2xlarge 实例:

    # Create Kubeflow Pipeline using Amazon SageMaker Service
    @dsl.pipeline(name="PyTorch Training pipeline", description="Sample training job test")
    def pytorch_cnn_pipeline(region=target_region,
    train_image=aws_dlc_sagemaker_train_image,
    serving_image=aws_dlc_sagemaker_serving_image,
    learning_rate='0.01',
    pytorch_backend='gloo',
    training_job_name=pytorch_distributed_jobname,
    instance_type='ml.p3.2xlarge',
    instance_count='2',
    network_isolation='False',
    traffic_encryption='False',
    ):
    
    # Step to run training on SageMaker using SageMaker Components V2 for Pipeline.
    training = sagemaker_train_ack_op(
    region=region,
    algorithm_specification=(f'{{ '
    f'"trainingImage": "{train_image}",'
    '"trainingInputMode": "File"'
    f'}}'),
    training_job_name=training_job_name,
    hyper_parameters=(f'{{ '
    f'"backend": "{pytorch_backend}",'
    '"batch-size": "64",'
    '"epochs": "10",'
    f'"lr": "{learning_rate}",'
    '"model-type": "custom",'
    '"sagemaker_container_log_level": "20",'
    '"sagemaker_program": "cifar10-distributed-gpu-final.py",'
    f'"sagemaker_region": "{region}",'
    f'"sagemaker_submit_directory": "{source_s3}"'
    f'}}'),
    resource_config=(f'{{ '
    f'"instanceType": "{instance_type}",'
    f'"instanceCount": {instance_count},'
    '"volumeSizeInGB": 50'
    f'}}'),
    input_data_config=training_input(datasets),
    output_data_config=training_output(bucket_name),
    enable_network_isolation=network_isolation,
    enable_inter_container_traffic_encryption=traffic_encryption,
    role_arn=role,
    stopping_condition={"maxRuntimeInSeconds": 3600}
    )
    
    model_artifact_url = get_s3_model_artifact_op(
    training.outputs["model_artifacts"]
    ).output
    
    # This step creates SageMaker Model which refers to model artifacts and inference script to deserialize the input image
    create_model = sagemaker_model_op(
    region=region,
    model_name=training_job_name,
    image=serving_image,
    model_artifact_url=model_artifact_url,
    network_isolation=network_isolation,
    environment=(f'{{ '
    '"SAGEMAKER_CONTAINER_LOG_LEVEL": "20",'
    '"SAGEMAKER_PROGRAM": "inference.py",'
    f'"SAGEMAKER_REGION": "{region}",'
    f'"SAGEMAKER_SUBMIT_DIRECTORY": "{model_artifact_url}"'
    f'}}'),
    role=role
    )
    
    # This step creates SageMaker Endpoint which will be called to run inference
    prediction = sagemaker_deploy_op(
    region=region,
    model_name_1=create_model.output,
    instance_type_1='ml.c5.xlarge'
    )
    
    #Disable pipeline cache
    training.execution_options.caching_strategy.max_cache_staleness = "P0D"

    定义管道后,您可以使用 Kubeflow Pipelines SDK 将管道编译为 Argo YAML 规范 kfp.compiler 包裹。 您可以使用 Kubeflow Pipelines SDK 客户端运行此管道,该客户端调用 Pipelines 服务端点并直接从笔记本传入适当的身份验证标头。 请参见以下代码:

    # DSL Compiler that compiles pipeline functions into workflow yaml.
    kfp.compiler.Compiler().compile(pytorch_cnn_pipeline, "pytorch_cnn_pipeline.yaml")
    
    # Connect to Kubeflow Pipelines using the Kubeflow Pipelines SDK client
    client = kfp.Client()
    
    experiment = client.create_experiment(name="ml_workflow")
    
    # Run a specified pipeline
    my_run = client.run_pipeline(experiment.id, "pytorch_cnn_pipeline", "pytorch_cnn_pipeline.yaml")
    
    # Please click “Run details” link generated below this cell to view your pipeline. You can click every pipeline step to see logs.

  2. 选择 运行详情 最后一个单元格下的链接可查看 Kubeflow 管道。 以下屏幕截图显示了 SageMaker 培训和部署组件的管道详细信息。通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。
  3. 选择训练作业步骤并在 日志 选项卡,选择 CloudWatch 日志链接以访问 SageMaker 日志。
    以下屏幕截图显示了两个 ml.p3.2xlarge 实例中每个实例的 CloudWatch 日志。通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。
  4. 选择任何组以查看日志。通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。
  5. 通过选择 Sagemaker – 部署模型 步骤并复制 endpoint_name 输出神器值。通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。

调用 SageMaker 端点

笔记本 STEP1.1_invoke_sagemaker_endpoint.ipynb 调用在上一步中创建的 SageMaker 推理端点。 确保更新端点名称:

# Invoke SageMaker Endpoint. * Ensure you update the endpoint
# You can grab the SageMaker Endpoint name by either 1) going to the pipeline visualization of Kubeflow console and click the component for deployment, or 2) Go to SageMaker console and go to the list of endpoints, and then substitute the name to the EndpointName='...' in this cell.

endpointName=''

response = client.invoke_endpoint(EndpointName=endpointName,
ContentType='application/x-image',
Body=payload)

pred = json.loads(response['Body'].read().decode())

output_vector_list=pred['score']

# Get outout vector of 10 classes
output_vector = output_vector_list[0]

# Find the class with highest probability
max=output_vector[0]
index = 0
for i in range(1,len(output_vector)):
if output_vector[i] > max:
max = output_vector[i]
index = i

print(f'Index of the maximum value is : {index}')

labels = ['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck']

print(labels[index])

清理

要清理您的资源,请完成以下步骤:

  1. 在 AWS Cloud9 中运行以下命令以删除 AWS 资源:
    cd ${MANIFEST_DIR}/deployments/vanilla/terraform
    make delete

  2. 删除 IAM 角色“sagemakerrole” 使用以下 AWS CLI 命令:
    aws iam detach-role-policy --role-name sagemakerrole --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
    aws iam detach-role-policy --role-name sagemakerrole --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
    aws iam delete-role --role-name sagemakerrole

  3. 使用以下 AWS CLI 命令删除 SageMaker 终端节点:
    aws sagemaker delete-endpoint --endpoint-name  --region us-west-2

总结

在本文中,我们强调了 AWS 1.6.1 上的 Kubeflow 通过本地 AWS 托管服务集成提供的价值,以满足企业级 AI 和 ML 用例的需求。 您可以从多个部署选项中进行选择,以使用 Terraform、Kustomize 或 Helm 通过各种服务集成在 AWS 上安装 Kubeflow。 这篇博文中的用例演示了 Kubeflow 与 SageMaker 的集成,它使用 SageMaker 托管训练集群为图像分类模型运行分布式训练,并使用 SageMaker 端点进行模型部署。

我们还提供了一个 示例管道示例 使用最新的 SageMaker 组件; 您可以直接从 Kubeflow 仪表板运行它。 该管道需要 亚马逊 S3 数据SageMaker 执行 IAM 角色 作为所需的输入。

要开始使用 AWS 上的 Kubeflow,请参阅可用的 AWS 集成部署选项 AWS 上的 Kubeflow. 您可以按照 AWS 实验室存储库 跟踪所有 AWS 对 Kubeflow 的贡献。 您也可以在 Kubeflow #AWS Slack 频道; 您的反馈将帮助我们优先考虑为 Kubeflow 项目做出贡献的下一个功能。


关于作者

通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。坎瓦尔吉特·库尔米 是 Amazon Web Services 的高级解决方案架构师。 他与 AWS 客户合作,提供指导和技术援助,帮助他们在使用 AWS 时提高解决方案的价值。 Kanwaljit 专门帮助客户使用容器化和机器学习应用程序。

通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。卡尔蒂克·卡拉马迪 是 Amazon AI 的一名软件开发工程师。 目前专注于机器学习 Kubernetes 开源项目,例如 Kubeflow 和 AWS SageMaker Controller for k8s。 在业余时间,我喜欢玩 PC 游戏和使用 Unity 引擎摆弄 VR。

通过一键式 Kubeflow on AWS 部署 PlatoBlockchain Data Intelligence 在 Amazon EKS 和 Amazon SageMaker 上启用混合 ML 工作流。 垂直搜索。 哎。拉胡尔卡斯 是 Amazon Web Services 的软件开发工程师。 他的工作重点是将 AWS 服务与开源容器化 ML Ops 平台集成,以提高其可扩展性、可靠性和安全性。 除了关注客户对功能的要求外,Rahul 还喜欢尝试该领域的最新技术发展。

时间戳记:

更多来自 AWS机器学习