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 ...
随机推荐
- 【Python】关于如何判断一个list是否为空的思考
前言 今天随手翻 stackoverflow,看到问题叫 How do I check if a list is empty? 一看这个问题,不难猜到到这是一个刚学 Python 的人提问的,因为这个 ...
- 媳妇儿喜欢玩某音中的动漫特效,那我就用python做一个图片转化软件。
最近某音上的动漫特效特别火,很多人都玩着动漫肖像,我媳妇儿也不例外.看着她这么喜欢这个特效,我决定做一个图片处理工具,这样媳妇儿的动漫头像就有着落了.编码 为了快速实现我们的目标,我们 ...
- 一、Python系列——函数的应用之名片管理系统
card_list = [] def main_desk(): print('*'*50) print('欢迎使用[名片管理系统]V1.0') print('1.新建名片') print('2.显示全 ...
- Go Pentester - HTTP CLIENTS(2)
Building an HTTP Client That Interacts with Shodan Shadon(URL:https://www.shodan.io/) is the world' ...
- 详解TCP一:三次握手、四次挥手
TCP协议同样是运输层的协议,掌握TCP重点要关注这几个问题:顺序问题.丢包问题.连接维护.流量控制.拥塞控制.先解析下TCP报文段结构,相比于UDP要复杂很多. 首先还是两个端口号,对应着具体的应用 ...
- 设计模式:decorator模式
两点: 继承同一虚接口,实现数据一致性 桥接方式指向被装饰类 目的:在不改变被装饰类功能的前提下增加新功能 特点:继承是子类和父类强耦合,桥接是低耦合 例子: class Print //抽象接口 { ...
- python dict乱码如何解决
定义字典并直接输出,结果输出结果中文是乱码展示 d={'name':'lily','age':18,'sex':'女','no':1121} print d 输出结果: {'age': 18, 'no ...
- python socket函数详解
关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄得清楚.通透,并记录下来, ...
- PHP array_replace_recursive() 函数
实例 递归地使用第二个数组($a2)的值替换第一个数组($a1)的值: <?php$a1=array("a"=>array("red")," ...
- PHP xml_parser_free() 函数
定义和用法 xml_parser_free() 函数释放 XML 解析器.高佣联盟 www.cgewang.com 如果成功,该函数则返回 TRUE.如果失败,则返回 FALSE. 语法 xml_pa ...