像Google一样构建机器学习系统 - 在阿里云上搭建Kubeflow Pipelines

简介: 谈到机器学习工作流平台,Google的工程经验非常丰富,它的TensorFlow Extended机器学习平台支撑了Google的搜索,翻译,视频等核心业务;更重要的是其对机器学习领域工程效率问题的理解深刻,

本系列将利用阿里云容器服务,帮助您上手Kubeflow Pipelines.

介绍

机器学习的工程复杂度,除了来自于常见的软件开发问题外,还和机器学习数据驱动的特点相关。而这就带来了其工作流程链路更长,数据版本失控,实验难以跟踪、结果难以重现,模型迭代成本巨大等一系列问题。为了解决这些机器学习固有的问题,很多企业构建了内部机器学习平台来管理机器学习生命周期,其中最有名的是Google的Tensorflow Extended,Facebook的FBLearner Flow,Uber的Michelangelo,遗憾的是这些平台都需要绑定在公司内部的基础设施之上,无法彻底开源。而这些机器学习平台的骨架就是机器学习工作流系统,它可以让数据科学家灵活定义自己的机器学习流水线,重用已有的数据处理和模型训练能力,进而更好的管理机器学习生命周期。

1_overview

谈到机器学习工作流平台,Google的工程经验非常丰富,它的TensorFlow Extended机器学习平台支撑了Google的搜索,翻译,视频等核心业务;更重要的是其对机器学习领域工程效率问题的理解深刻,

Google的Kubeflow团队于2018年底开源了Kubeflow Pipelines(KFP), KFP的设计与Google内部机器学习平台TensorFlow Extended一脉相承,唯一的区别是KFP运行在Kubenretes的平台上,TFX是运行在Borg之上的。

什么是Kubeflow Pipelines

Kubeflow Pipelines平台包括:

  • 能够运行和追踪实验的管理控制台
  • 能够执行多个机器学习步骤的工作流引擎(Argo)
  • 用来自定义工作流的SDK,目前只支持Python

而Kubeflow Pipelines的目标在于:

  • 端到端的任务编排: 支持编排和组织复杂的机器学习工作流,该工作流可以被直接触发,定时触发,也可以由事件触发,甚至可以实现由数据的变化触发
  • 简单的实验管理: 帮助数据科学家尝试众多的想法和框架,以及管理各种试验。并实现从实验到生产的轻松过渡。
  • 通过组件化方便重用: 通过重用Pipelines和组件快速创建端到端解决方案,无需每次从0开始的重新构建。

在阿里云上运行Kubeflow Pipelines

看到Kubeflow Piplines的能力,大家是不是都摩拳擦掌,想一睹为快?但是目前国内想使用Kubeflow Pipeline有两个挑战:
1.Pipelines需要通过Kubeflow部署;而Kubeflow默认组件过多,同时通过Ksonnet部署Kubeflow也是很复杂的事情。 2.Pipelines本身和谷歌云平台有深度耦合,无法在运行其他云平台上或者裸金属服务器的环境。

为了方便国内的用户安装Kubeflow Pipelines,阿里云容器服务团队提供了基于Kustomize的Kubeflow Pipelines部署方案。和普通的Kubeflow基础服务不同,Kubeflow Pipelines需要依赖于mysql和minio这些有状态服务,也就需要考虑如何持久化和备份数据。在本例子中,我们借助阿里云SSD云盘作为数据持久化的方案,分别自动的为mysql和minio创建SSD云盘。

您可以在阿里云上尝试一下单独部署最新版本Kubeflow Pipelines。

前提条件

在Linux和Mac OS环境,可以执行

opsys=linux  # or darwin, or windows
curl -s https://api.github.com/repos/kubernetes-sigs/kustomize/releases/latest |\
  grep browser_download |\
  grep $opsys |\
  cut -d '"' -f 4 |\
  xargs curl -O -L
mv kustomize_*_${opsys}_amd64 /usr/bin/kustomize
chmod u+x /usr/bin/kustomize

在Windows环境,可以下载kustomize_2.0.3_windows_amd64.exe

  • 在阿里云容器服务创建Kubernetes集群, 可以参考 文档

部署过程

1.通过ssh访问Kubernetes集群,具体方式可以参考文档

2.下载源代码

yum install -y git
git clone --recursive https://github.com/aliyunContainerService/kubeflow-aliyun

3.安全配置

3.1 配置TLS证书。如果没有TLS证书,可以通过下列命令生成

yum install -y openssl
domain="pipelines.kubeflow.org"
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.key -out kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.crt -subj "/CN=$domain/O=$domain"

如果您有TLS证书,请分别将私钥和证书保存到kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.keykubeflow-aliyun/overlays/ack-auto-clouddisk/tls.crt

3.2 配置admin的登录密码

yum install -y httpd-tools
htpasswd -c kubeflow-aliyun/overlays/ack-auto-clouddisk/auth admin
New password:
Re-type new password:
Adding password for user admin

4.首先利用kustomize生成部署yaml

cd kubeflow-aliyun/
kustomize build overlays/ack-auto-clouddisk > /tmp/ack-auto-clouddisk.yaml

5.查看所在的Kubernetes集群节点所在的地域和可用区,并且根据其所在节点替换可用区,假设您的集群所在可用区为cn-hangzhou-g,可以执行下列命令

sed -i.bak 's/regionid: cn-beijing/regionid: cn-hangzhou/g' \
    /tmp/ack-auto-clouddisk.yaml

sed -i.bak 's/zoneid: cn-beijing-e/zoneid: cn-hangzhou-g/g' \
    /tmp/ack-auto-clouddisk.yaml

建议您检查一下/tmp/ack-auto-clouddisk.yaml修改是否已经设置

6.将容器镜像地址由gcr.io替换为registry.aliyuncs.com

sed -i.bak 's/gcr.io/registry.aliyuncs.com/g' \
    /tmp/ack-auto-clouddisk.yaml

建议您检查一下/tmp/ack-auto-clouddisk.yaml修改是否已经设置

7.调整使用磁盘空间大小, 比如需要调整磁盘空间为200G

sed -i.bak 's/storage: 100Gi/storage: 200Gi/g' \
    /tmp/ack-auto-clouddisk.yaml

8.验证pipelines的yaml文件

kubectl create --validate=true --dry-run=true -f /tmp/ack-auto-clouddisk.yaml

9.利用kubectl部署pipelines

kubectl create -f /tmp/ack-auto-clouddisk.yaml

10.查看访问pipelines的方式,我们通过ingress暴露pipelines服务,在本例子中,访问ip是112.124.193.271。而Pipelines管理控制台的链接是:https://112.124.193.271/pipeline/

kubectl get ing -n kubeflow
NAME             HOSTS   ADDRESS           PORTS     AGE
ml-pipeline-ui   *       112.124.193.271   80, 443   11m

11.访问pipelines管理控制台

如果使用自签发证书,会提示此链接非私人链接,请点击显示详细信息, 并点击访问此网站。

non_tls

请输入步骤2.2中的用户名admin和设定的密码

auth

这时就可以使用pipelines管理和运行训练任务了。

pipelines

Q&A

1.为什么这里要使用阿里云的SSD云盘?

这是由于阿里云的SSD云盘可以设置定期的自动备份,保证pipelines中的元数据不会丢失。

2.如何进行云盘备份?

如果您想备份云盘的内容,可以为云盘 手动创建快照 或者 为硬盘设置自动快照策略 按时自动创建快照。

3.如何清理Kubeflow Piplines部署?

这里的清理工作分为两个部分:

  • 删除Kubeflow Pipelines的组件
kubectl delete -f /tmp/ack-auto-clouddisk.yaml
  • 通过释放云盘分别释放mysql和minio存储对应的两个云盘

4.如何使用现有云盘作为数据库存储,而避免自动创建云盘?

请参考文档

总结

本文为您初步介绍了Kubeflow Pipelines的背景和其所要解决的问题,以及如何在阿里云上通过Kustomize快速构建一套服务于机器学习的Kubeflow Pipelines,后续我们会分享如何利用Kubeflow Pipelines开发一个完整的机器学习流程。

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
7月前
|
机器学习/深度学习 人工智能 Kubernetes
Argo Workflows 加速在 Kubernetes 上构建机器学习 Pipelines
Argo Workflows 是 Kubernetes 上的工作流引擎,支持机器学习、数据处理、基础设施自动化及 CI/CD 等场景。作为 CNCF 毕业项目,其扩展性强、云原生轻量化,受到广泛采用。近期更新包括性能优化、调度策略增强、Python SDK 支持及 AI/大数据任务集成,助力企业高效构建 AI、ML、Data Pipelines。
787 1
|
8月前
|
机器学习/深度学习 存储 运维
机器学习异常检测实战:用Isolation Forest快速构建无标签异常检测系统
本研究通过实验演示了异常标记如何逐步完善异常检测方案和主要分类模型在欺诈检测中的应用。实验结果表明,Isolation Forest作为一个强大的异常检测模型,无需显式建模正常模式即可有效工作,在处理未见风险事件方面具有显著优势。
664 46
|
8月前
|
存储 人工智能 运维
企业级MLOps落地:基于PAI-Studio构建自动化模型迭代流水线
本文深入解析MLOps落地的核心挑战与解决方案,涵盖技术断层分析、PAI-Studio平台选型、自动化流水线设计及实战构建,全面提升模型迭代效率与稳定性。
339 6
|
8月前
|
机器学习/深度学习 PyTorch API
昇腾AI4S图机器学习:DGL图构建接口的PyG替换
本文探讨了在图神经网络中将DGL接口替换为PyG实现的方法,重点以RFdiffusion蛋白质设计模型中的SE3Transformer为例。SE3Transformer通过SE(3)等变性提取三维几何特征,其图构建部分依赖DGL接口。文章详细介绍了两个关键函数的替换:`make_full_graph` 和 `make_topk_graph`。前者构建完全连接图,后者生成k近邻图。通过PyG的高效实现(如`knn_graph`),我们简化了图结构创建过程,并调整边特征处理逻辑以兼容不同框架,从而更好地支持昇腾NPU等硬件环境。此方法为跨库迁移提供了实用参考。
|
8月前
|
机器学习/深度学习 数据采集 分布式计算
阿里云PAI AutoML实战:20分钟构建高精度电商销量预测模型
本文介绍了如何利用阿里云 PAI AutoML 平台,在20分钟内构建高精度的电商销量预测模型。内容涵盖项目背景、数据准备与预处理、模型训练与优化、部署应用及常见问题解决方案,助力企业实现数据驱动的精细化运营,提升市场竞争力。
1348 0
|
数据可视化 定位技术 Sentinel
如何用Google Earth Engine快速、大量下载遥感影像数据?
【2月更文挑战第9天】本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,批量下载指定时间范围、空间范围的遥感影像数据(包括Landsat、Sentinel等)的方法~
5398 1
如何用Google Earth Engine快速、大量下载遥感影像数据?
|
编解码 人工智能 算法
Google Earth Engine——促进森林温室气体报告的全球时间序列数据集
Google Earth Engine——促进森林温室气体报告的全球时间序列数据集
327 0
|
编解码 人工智能 数据库
Google Earth Engine(GEE)——全球道路盘查项目全球道路数据库
Google Earth Engine(GEE)——全球道路盘查项目全球道路数据库
424 0
Google Earth Engine(GEE)——导出指定区域的河流和流域范围
Google Earth Engine(GEE)——导出指定区域的河流和流域范围
903 0