Amazon SageMaker是一项能够帮忙开发人员和数据科学家疾速构建、训练和部署机器学习(ML)模型的托管服务;Kubeflow则是一个为Kubernetes构建的可组合、可移植、可扩大机器学习技术栈。这两者联合在一起可能玩出什么新花样?

下文将以思科的实际案例登程介绍他们的做法。

作为一家大型企业,思科旗下多个业务部门都在利用机器学习(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组件与Amazon SageMaker Kubeflow组件独特创立起一条混合型管道。

要应用各组件,须要首先导入Kubeflow Pipeline软件包,其中包含AWS软件包:

import kfpimport kfp.dsl as dslfrom kfp import componentsfrom 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)

运行管道

要运行管道,请实现以下操作步骤:

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

@dsl.pipeline( name='MXNet Sagemaker Hybrid Pipeline', description='Pipeline to train BLERSSI model using mxnet and save in aws s3 bucket')def mxnet_pipeline( region="", image="", model_name="", endpoint_config_name="", endpoint_name="", model_artifact_url="", instance_type_1="", role=""): train_upload_model = blerssi_mxnet_train_upload_op() create_model = sagemaker_model_op( region=region, model_name=model_name, image=image, model_artifact_url=model_artifact_url, role=role ).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')) create_model.after(train_upload_model) sagemaker_deploy=sagemaker_deploy_op( region=region, endpoint_config_name=endpoint_config_name, endpoint_name=endpoint_name, model_name_1=create_model.output, instance_type_1=instance_type_1 ).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')) sagemaker_deploy.after(create_model)

对于配置的更多详细信息,请参阅管道疾速上手指南。要获取残缺管道代码,请参阅GitHub repo。

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

run = client.run_pipeline(blerssi_hybrid_experiment.id, 'blerssi-sagemaker-pipeline-'+timestamp, pipeline_package_path='mxnet_pipeline.tar.gz', params={ 'region': aws_region, 'image': inference_image, 'model_name': model_name, 'endpoint_config_name': endpoint_config_name, 'endpoint_name': endpoint_name, 'model_artifact_url': model_path, 'instance_type_1': instance_type, 'role': role_arn})

到这里,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区域内提供冗余保障。