Kubeflow实战: 入门介绍与部署实践
更多内容关注专辑:
机器学习实战
1 介绍
Kubeflow是在k8s平台之上针对机器学习的开发、训练、优化、部署、管理的工具集合,内部集成的方式融合机器学习中的很多领域的开源项目,比如Jupyter、tfserving、Katib、Fairing、Argo等。可以针对机器学习的不同阶段:数据预处理、模型训练、模型预测、服务管理等进行管理。只要安装了k8s,可以在本地、机房、云环境中部署。

2 开发工具集
机器学习的目标最终还是为了在生产环境或者业务场景中使用,但这个过程却是很复杂的,需要进行数据加载、切分、预处理、特征工程、模型训练、验证、超参数调优、模型部署等等;为了正常使用模型,还需要在模型上线后,持续不断的输入数据才能得到预测的结果。

人工构建整个过程并进行维护是很复杂的,使用Kubeflow可以节省很多成本。比如在构建模型时,可以选择你喜欢的算法框架进行模型开发,试验阶段可以通过Jupyter进行交互式的编程,基于Pipeline构建整个训练过程的工作流实现各种处理逻辑,基于Katib进行超参数的自动优化;生产环境中,可以使用TFJob等进行分布式训练,基于KFServing等进行在线模型的服务,基于Metadata或TensorBoard进行模型的监控。

3 使用场景
扩展性:Kf基于k8s可以达到可扩展、可移植、分布式ML平台, 通过Kf你可以轻松管理整个AI生命周期,比如在模型部署的时候自动进行扩容、在试验阶段自由创建笔记本。由于底层基于K8s来提供一致性与高可靠,使用者可以更聚焦于上层的算法模型设计,而不用过多的关注底层构建。
迭代性:构建高质量的机器学习模型可能需要快速的迭代,Kf提供友好的UI界面支持快速追踪对比实验结果,你可以很方便的决定哪个模型训练效果更好。Kf内部提供Jupyter笔记本,支持如Tensorflow、Pytorch等流行的深度学习框架。模型训练配置简单,方便进行分布式训练、部署,提升端到端的开发过程。
混合性:机器学习模型的训练可能涉及多个团队、多个集群和云环境的共享,Kf支持主流的云平台,提供各个环境之间的移植性。你可以在本地开发模型、在集群的GPU上进行训练、最后部署到云环境中,快速的开发模式和高效的部署使得整个过程就像单机操作一样。
超参调优:在模型训练中,超参数调优是很关键也很复杂的过程,对模型最终的准确度和性能有很大的影响,手动尝试各种超参数的组合非常浪费时间。Kf通过Katib来支持自动超参数优化,这种自动优化会节省大量的计算时间,提高模型优化的效率。
持续集成:Kf目前并没有这个方面成型的产品,但是可以通过Pipeline组件来实现。Pipeline支持创建可重复的工作流,可以自动触发整个工作流的重跑以及模型的训练。
4 部署
Kubeflow的部署其实很简单,主要是依赖的镜像大多出自Google因此会遇到很多网络问题。解决办法推荐是通过阿里云镜像手动下载docker镜像,然后tag成目标镜像;或者直接修改kustomize中的镜像地址。
安装时需要下载kfctl并按照文档配置环境变量,比如我试过Ubuntu 18,可以参考下面的文档:https://www.kubeflow.org/docs/started/k8s/kfctl-k8s-istio/,大致流程如下:
1 到地址中下载对应的kfctl,darwin为mac,linux为其他,不支持windows
https://github.com/kubeflow/kfctl/releases/tag/v1.0.2
2 压缩包解压缩
tar -xvf kfctl_v1.0.2_<platform>.tar.gz
3 配置环境变量 vi /etc/profile
export PATH=$PATH:"<path-to-kfctl>"
export KF_NAME=<自定义名称>
export BASE_DIR=<path to a base directory>
export KF_DIR=${BASE_DIR}/${KF_NAME}
export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml"
4 更新环境变量
source /etc/profile
5 执行命令
mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl apply -V -f ${CONFIG_URI}
6 查看安装服务
kubectl -n kubeflow get all
整个安装过程很缓慢,尤其是前期需要安装cert-manager进行权限控制,需要等服务正常。

中间会有大量的镜像报错ImagePullBackOff,这表示镜像拉取失败。解决办法:
1 查看具体pod的详情
kubectl describe pod admission-webhook-bootstrap-stateful-set-0 -n kubeflow
2 去阿里云镜像站搜索镜像
docker pull registry.cn-hangzhou.aliyuncs.com/pigeonw/ingress-setup
3 重命名
sudo docker tag registry.cn-hangzhou.aliyuncs.com/pigeonw/ingress-setup:latest gcr.io/kubeflow-images-public/ingress-setup:latest
4 修改kustomize中的配置
cd ./kustomize/webhook/base
sudo vim deployment.yaml
修改镜像拉取策略
imagePullPolicy: IfNotPresent
原来如果是Always表示总是会去拉取远程镜像,IfNotPresent表示本地不存在时才会拉取
5 修改完成后等待一会,如果状态还没有变成Running,可以执行
kfctl apply -f kfctlxxx.yaml 重新创建
都部署成功后,大致可以看到如下的运行状态,仅供参考:



5 使用
部署成功后,通过端口映射可以支持在外部访问:
export NAMESPACE=istio-system
kubectl port-forward --address 0.0.0.0 -n ${NAMESPACE} svc/istio-ingressgateway 8080:80
然后访问目标地址即可,如localhost:8080,自定义namespace后可以看到如下画面:

后面将会分享Notebook、Pipeline、Katib等的使用,感谢关注。
Kubeflow实战: 入门介绍与部署实践的更多相关文章
- Ceph实战入门之安部署篇
最近Ceph官方发布了luminous长久支持版,新版本增加了很多有意思的功能,但是入门还是先从部署安装开始. 环境说明 在Win10下安装VMware® Workstation 12 Pro软件,用 ...
- 《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发
<ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...
- 初识Hadoop入门介绍
初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...
- [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍
前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...
- 基于AWS的自动化部署实践
过年前,我给InfoQ写了篇文章详细介绍我们团队在过去4年基于AWS的自动化部署实践.文章包括了:为什么选择AWS.AWS上自动化部署的优势和挑战.我们的解决方案,以及和AWS DevOps方案(Op ...
- MySQL入门介绍(mysql-8.0.13)
MySQL入门介绍(mysql-8.0.13单机部署) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL数据库介绍 1>.MySQL是一种开放源代码的关系型数据库 ...
- 学习Mysql过程中拓展的其他技术栈:Docker入门介绍
一.Docker的介绍和安装 1. Docker是什么 百度百科的介绍: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linu ...
- Redis介绍及部署在CentOS7上(一)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- 《OpenStack部署实践》
<OpenStack部署实践> 基本信息 作者: 张子凡 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115346797 上架时间:2014-2-27 出版日期:2014 ...
随机推荐
- day4:运算符
1.算术运算符:+ - * / // % ** 注意点:1./ 除法,结果为小数 2.// 地板除,返回整数 3.如果被除数或者除数是一个小数,结果加上.0 2.比较运算符:< > & ...
- bzoj3289Mato的文件管理
bzoj3289Mato的文件管理 题意: 一共有n份资料,每天随机选一个区间[l,r],Mato按文件从小到大的顺序看编号在此区间内的这些资料.他先把要看的文件按编号顺序依次拷贝出来,再用排序程序给 ...
- day10 python之函数的参数
函数的基本属性 1.1 函数的含义 # 1.功能 :包裹代码,实现功能,达到目的 # 2.特点 :反复调用,提高开发效率,便于代码维护 1.1.2 函数的基本格式 # 函数名 :变量命名规则 # 函数 ...
- python基础算法
一.简介 定义和特征 定义:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时 ...
- 牛客练习赛 66B题解
前言 当初思路 开始没想到异或这么多的性质,于是认为对于每个点\(u\),可以和它连边的点\(v\)的点权 \(a_v=a_u \oplus k\)(证明:\(\because\) \(a_u\opl ...
- list基本使用
list和vector的用法基本相同,区别如下: list可以头尾插入和删除,效率一样,vector只有尾部插入和删除效率才高,头部操作效率很低 list的排序有专有的接口,不能使用全局的接口,原因是 ...
- ubuntu安装 jdk
首先查一下当前JDK的版本 ,一般是系统自带Jdk$ java -version 然后根据版本8安装完整版的OpenJDK $ sudo apt-get install openjdk-8-jdk 如 ...
- js读取其他网页内容(同源)
通过xss第一次取得网页内容,然后获取到管理员账号页面进行二次盲打.js需要保留script部分其余去除. <html><p id='d1'></p> <sc ...
- 深度搜索---------Lake counting
#include<iostream>#include<cstdio>#include<cstdlib>#define maxn 100char ch[maxn][m ...
- SpringBoot+Vue项目上手
博客 https://gitee.com/RoadsideParty/White-Jotter-Vue?_from=gitee_search UI框架 https://at-ui.github.io/ ...