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 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)
运行管道
要运行管道,请实现以下操作步骤:
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 区域内提供冗余保障。