亚马逊AWS官方博客

思科使用 Amazon SageMaker 与 Kubeflow 创建混合机器学习工作流

Original URL:https://aws.amazon.com/cn/blogs/machine-learning/cisco-uses-amazon-sagemaker-and-kubeflow-to-create-a-hybrid-machine-learning-workflow/

 

本文为思科AI/ML最佳实践团队成员撰写的客座文章,作者为技术产品经理Elvira Dzhuraeva、杰出工程师Debo Dutta以及首席工程师Amit Saha

思科是一家大型企业,旗下多个业务部门中都在应用机器学习(ML)与人工智能(AI)技术。向CTO直接报告的思科AI团队主要负责在公司内部各业务部门中推广开源AI/ML最佳实践,同时也是Kubeflow开源项目与MLPerf/MLCommons的主要贡献者。我们的目标是在机器学习领域开发出要同时供思科业务部门与客户使用的工件与最佳实践,并以参考架构的形式共享这些解决方案。

由于业务需求(例如本地化数据要求),思科公司运营着一套混合云环境。模型训练在我们自己的思科UCS硬件之上完成,但我们也有不少团队在使用云端资源执行推理,借此实现良好的可扩展性、地理冗余与弹性。然而,由于在混合集成环境下构建并支持统一的AI/ML工作流往往对专业知识与使用技能提出严苛要求,因此客户在实际使用中可能面临巨大挑战。

为了解决这个问题,我们使用Cisco Kubeflow入门包为混合云环境构建起机器学习管道,其中的云端模型推理服务正是由Amazon SageMaker负责提供。通过这样一套参考架构,我们希望帮助客户在复杂的基础设施中构建起无缝且统一的机器学习工作负载,进而解决他们可能面临的任何限制。

Kubeflow是一套用于Kubernetes上机器学习编排的流行开源库。如果您使用的同样是混合云环境,则可安装Cisco Kuberflow入门包在本地设施中开发、构建、训练并部署机器学习模型。此入门包中包含最新版本的Kubeflow以及示例应用程序捆绑包。

Amazon SageMaker则是一项托管机器学习服务,可帮助您准备数据、处理数据、训练模型、跟踪模型实验、托管模型以及监控端点。使用SageMaker Components for Kubeflow Pipelines,您可以像思科在混合机器学习项目中一样在Kubeflow管道中编排各项作业。通过这种方法,我们可以无缝地从本地Kubeflow集群上实现对Amazon SageMaker托管服务的调用,以完成模型的训练与推理。此外,Amazon SageMaker还让我们的托管模型具备一系列企业级功能,例如自动规模伸缩、多模型端点、模型监控、高可用性以及安全合规等。

为了解释我们的用例如何工作,我们使用完全公开的室内定位与导航BLE RSSI数据集重新创建场景。这套数据集中包含蓝牙低功耗(BLE)接收信号强度指示(RSSI)指标。整个管道将训练并部署模型,借以预测蓝牙设备的位置。在以下步骤中,我们将介绍Kubernetes集群如何与Amazon SageMaker交互以实现混合解决方案。我们将使用运行在Cisco UCS服务器上的Kubeflow以训练由Apache MXNet编写的机器学习模型,满足我们的数据本地化要求,而后使用Amazon SageMaker将模型部署至AWS。

创建并训练完成的模型将被上传至 Amazon Simple Storage Service (Amazon S3),而后使用Amazon SageMaker端点提供服务。下图所示,为我们的端到端工作流程。

开发环境

首先,如果您当前没有思科硬件,则可以设置 Amazon Elastic Kubernetes Service (Amazon EKS)以配合Kubeflow共同运行。关于具体操作说明,请参阅创建Amazon EKS集群部署Kubeflow管道

如果您已经拥有一台UCS设备,则可在Kubernetes集群(v15.x或者更高版本)上使用Cisco Kubeflow入门包快速完成Kubeflow设置。要安装Kubeflow,请在该设备的IP地址中设定 INGRESS_IP变量,并运行 kubeflowup.bash安装脚本。具体参见以下代码:

export INGRESS_IP=<UCS Machine's IP>
bash kubeflowup.bash

关于安装的更多详细信息,请参阅GitHub repo上的安装说明

准备混合管道

为了在Cisco UCS与AWS之间建立起无缝工作流,我们使用Kubeflow Pipelines组件与Amaon SageMaker Kubeflow组件共同创建起一条混合型管道。

要使用各组件,我们需要首先导入Kubeflow Pipeline软件包,其中包括AWS软件包:

import kfp
import kfp.dsl as dsl
from kfp import components
from kfp.aws import use_aws_secret

关于配置及运行管道的完整代码,请参见GitHub repo

以下管道描述以图形形式呈现了工作流以及各组件之间的相互关系。管道配置包括运行管道所需要的输入(参数)定义,以及各组件的输入与输出。以下截屏为Kubeflow UI上已经完成的管道的直观表示。

这条管道将运行以下三个步骤:

  1. 训练模型。
  2. 创建模型资源。
  3. 部署模型。

训练模型

大家可以在本地设备中使用BLE数据训练模型、创建镜像、将镜像上传至S3存储桶,而后通过应用MXNet模型配置.yaml文件将模型注册至Amazon SageMaker。

将经过训练的模型上传至Amazon S3之后,Amazon SageMaker即可进一步将存储在S3中的模型部署至托管端点。Amazon SageMaker端点能够简化下游应用程序对模型的使用,同时帮助团队使用Amazon CloudWatch监控其运行状态。具体参见以下代码:

def blerssi_mxnet_train_upload_op(step_name='mxnet-train'):
    return dsl.ContainerOp(
        name='mxnet-train-upload-s3',
        image='ciscoai/mxnet-blerssi-train-upload:v0.2',
        command=['python', '/opt/mx-dnn.py', 'train'],
        arguments=['--bucket-name', bucket_name]
    ).apply(use_aws_secret(secret_name=aws_secret_name, aws_access_key_id_name='AWS_ACCESS_KEY_ID', aws_secret_access_key_name='AWS_SECRET_ACCESS_KEY'))

创建模型资源

在将MXNet模型与工件上传至Amazon S3时,请使用 KF Pipeline CreateModel组件以创建一套Amazon SageMaker模型资源。

Amazon SageMaker端点API非常灵活并提供多种选项,可以将经过训练的模型部署至端点之上。例如,您可以使用默认的Amazon SageMaker运行时管理模型部署、运行状况检查以及模型调用等操作。Amazon SageMaker还允许用户使用自定义容器与算法对运行时进行自定义。关于具体操作说明,请参阅Amazon SageMaker容器概述

在本用例中,我们希望在一定程度上对模型运行状况检查API与模型调用API加以控制。我们使用自定义方案替换掉默认Amazon SageMaker运行时,用于部署训练完成的模型。这套自定义预测器能够灵活调整传入请求的处理方式,并将其传递至模型以执行预测。具体参见以下代码:

sagemaker_model_op = components.load_component_from_url(model)

部署模型

您可以使用KF Pipeline CreateModel组件将模型部署至Amazon SageMaker端点。

使用自定义容器进行推理,能够为团队提供最大程度的灵活性,借此任意调整运行状况检查与模型调用方式。当然,自定义容器也必须遵循Amazon SageMaker运行中关于API路径的原则性要求,具体参见以下代码:

sagemaker_deploy_op = components.load_component_from_url(deploy)

运行管道

要运行您的管道,请完成以下操作步骤:

  • 配置Python代码,用于通过Amazon SageMaker组件定义这条混合管道:

关于配置的更多详细信息,请参阅管道快速上手指南。要获取完整管道代码,请参阅 GitHub repo

  • 提供以下参数运行管道,借此执行管道功能:

到这里,BLE RSSI Amazon SageMaker管道已经顺利开始执行。在所有组件成功执行之后,检查sagemaker-deploy组件的日志以验证端点是否已经成功创建。以下截屏所示,为最后一步的日志记录以及指向已部署模型的URL。

验证模型

在将模型部署至AWS之后,我们使用这套模型的端点名称通过HTTP请求向其提交示例数据,借此验证模型的预测性能。以下截屏所示,为示例Jupyter notebook中的部分摘要。此notebook带有Python客户端以及位置预测输出。

总结

Amazon SageMaker与Kubeflow Pipelines能够轻松被集成在统一的混合管道当中。Amazon SageMaker还提供完善的博客与教程集合,可帮助大家轻松通过Amazon SageMaker components for Kubeflow Pipelines创建起混合管道。其API亦非常丰富,涵盖了我们需要使用的所有关键组件,并允许您开发自定义算法并与Cisco Kubeflow入门包进行集成。通过将训练完成的机器学习模型上传至Amazon S3以供Amazon SageMaker在AWS中使用,我们将管理复杂机器学习生命周期的总体复杂度与总拥有成本降低约50%。我们还严格遵守企业隐私策略提出的最高标准,以可扩展方式实现模型交付,并在美国及世界各地的AWS区域内提供冗余保障。

 

本篇作者

Elvira Dzhuraeva

思科公司技术产品经理,主要负责云端/本地机器学习与人工智能策略。她同时也是Kubeflow社区产品经理兼MLPerf社区成员。

Debo Dutta

思科公司杰出工程师,他领导着一支着力研究算法、系统与机器学习交汇议题的技术小组。除了在思科公司的职务,Debo目前还是斯坦福大学的访问学者。他拥有南加州大学计算机科学博士学位,以及印度理工学院计算机科学本科学位。

Amit Saha

思科公司首席工程师,主要领导系统与机器学习方面的工作,同时也是印度理工大学的客座教授。他拥有休斯顿莱斯大学计算机科学博士学位以及印度理工大学本科学位。他曾在多个顶级计算机科学会议项目委员会中任职。

Phi Nguyen

AWS解决方案架构师,主要关注数据湖、分析、语义技术以及机器学习等领域,帮助客户完成云探索之旅。在业余时间,他喜欢骑自行车上班、担任儿子足球队的教练并与家人共同享受户外漫步。