【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

Caicloud 岑鹏浩:TensorFlow on Kubernetes

  • 2020-03-05
  • 本文字数:5075 字

    阅读完需:约 17 分钟

Caicloud 岑鹏浩:TensorFlow on Kubernetes

来自网易云容器编排技术负责人娄超、kubeup.com 创始人 Adieu、才云科技开源工程师岑鹏浩,各路大咖联袂献艺,为大家呈现了一场精彩纷呈的技术交流。



今天,为大家带来的是才云科技开源工程师岑鹏浩的演讲视频+ PPT ,请大家点击“阅读原文”获取。下面是其 《 Caicloud TaaS Introduction --TensorFlow on Kubernetes 》的演讲实录(全程文字速记由 IT 大咖说整理提供)



谢谢大家!我刚才刷微博说今天南京的降雨量已经达到 208 毫米,已经突破了历史最高值,上一次历史最高值好像是 2003 年。非常感谢大家今天能够冒雨过来,跟大家见证一个历史的时刻。


我今天的分享会比较轻松一点,大家中间有什么问题可以随时地打断提问。第一个会介绍一下深度学习是一个什么样的历史,还有它现在的一些现状,下面是一些 Caicloud 的简介,再下面是分布式 TensorFlow 是如何跑在 Kubernetes 上的。



第一张图,大家有人知道是一个什么样的事情吗?OK ,就是前一段时间在浙江的乌镇搞了一个 AlphaGo 和柯洁的围棋比赛,柯洁是 0:3 失败,它就是用的深度学习的架构。右边是 Google 的一个项目,是自动驾驶的一个项目,大家应该很熟悉了,它其实也是基于深度学习来完成的一个项目。



左边是一个图像识别出来的效果,大家可以看一下,你告诉它一张图片,它可以在这张图片里面自动标识出来图片里面有东西,不同的颜色是代表不同的东西,左边有两把椅子,有一只狗和一个小孩。这个背后也是用的深度学习的东西。


这个里面有很多庞大的一些图片的数据,你可以基于它的数据去训练你的模型,它也可以给出一些测试的数据,你可以根据它的测试数据来验证你的模型的准确率。右边一个就是图片识别历年的变化,每年会举办图片识别的比赛,包括学术界都会来验证他们深度学习的效果。大家可以看到 2010 年、2012 年之前,这个错误率是在 28%、26%的一个数值,当图像识别出来以后,错误率在大幅度下降。这边是有一个 5.1%,这个是人类自己识别的错误率。大家发现 2015 年之后机器的识别错误率明显低于人类。



深度学习是怎么做的呢?其实简单地概括来讲,就是三个步骤。第一个步骤是数据的准备,大家可以理解为一些特征的提取,包括去分析你到底要解决什么问题。比如刚才那个例子,就是我怎么样让机器来识别一张图片里面有什么样的东西,这就是具体的实际问题。当你的数据准备好以后,你要准备你训练的数据以及你测试的数据。当你的数据准备好了之后,下面就是一些训练的工作,其实就是不断地优化你的模型,让它不断地接近你的预期,当你的预期比较满足了,你就可以把这个模型打包成一个产品,真正地提供一个服务。这个数据准备好,就是通过一个模型训练,训练好了之后打包,就是一个很简单的步骤。


模型大家可以简单地理解为一个数学公式,大家比较好理解。训练的过程,其实 X 就是一些输入,就是我一些训练的数据,我把 X 传给这样一个方程,A 和 B 是我要找到的两个值,大家可以认为是我训练的一个结果。就是我要找到一个非常满意的那个 A 和 B,让这个 Y 等于我的一个预期。这样的解释大家可以明白吗?就是一个比较简单的解释。


训练的过程就是不断地把这个 X 值去调整,不断地去评估 Y 的值,这样经过很多轮迭代之后,就可以把 Y 的值出来的结果和我们的预期相符。这样我们就认为一次训练就结束了。当然实际在工作中可能这会是一个不断优化的过程,真正的一个模型可能它的参数,就是 A 和 B 可能是成千上万的。我们今天讲的主要就是训练这一块的内容,前面的数据准备和后面的模型托管基本上没有涉及到。



现在有了一个对 TensorFlow 深度学习的框架,它的支持语言很多,它支持分布式的东西。有人用怎么样用一句话来概括一下 TensorFlow 是什么特点?


TensorFlow 是深度学习里面提供了一个类似积木的框架,你可以通过这套积木来设计你想要的汽车也好,房子也好,可以简单地这样比喻一下。学术界可以用这套积木来搭建设计很精美的模型,来展示给大众来看一下。工业界也可以用这套积木来构建他们很稳定的一个产品,把他们的一些对外的服务提供出来。所以这边会有一个特点,就是它兼顾着学术界和工业界,这也是它能在很短的时间内迅速推广的一个比较重要的原因。这边列了一些它的好处,包括它内嵌了很多深度学习的算法和模型,大家入手会比较方便一点。



TensorFlow 可以跑在很多硬件的平台上面,包括 CPU、 GPU 和 TPU,大家听说过 TPU 没有?是 Google 专门用来跑 TensorFlow 的一个专门的服务器,AlphaGo 也是跑在这个上面的,所以说它的平台的一些可扩展性是非常好的。



举个例子,你在手机上面现在有那种翻译的软件,其实现在已经有人做出来了,就是把 TensorFlow 用在手机上面,可以帮助你算出来的一些结果。这个是列的一些常用的语言,C++ 是比较好的,JAVA 也有。



一个好的开源框架其实跟它的社区是密切相关的,这个是常用的一些深度学习的社区活跃度。TensorFlow 是在 2015 年 11 月份开源的,大家可以看到很明显的一个上升的曲线。Google 开源了这个之后,社区的活跃度提升是非常明显的,它已经远远超过了其他的一些开源的框架。



TensorFlow 的一些历史我们就讲到这里,现在我们简单地运行一个 TensorFlow 的程序,这边列出了一个 docker 的镜像,这个也很简单,把两边端口暴露出来,这个是我们才云自己构建的镜像。这个镜像跑会有两个效果,会启用一个在线的编辑器,可以在里面运行的代码。第二个是启用了一个可视化的工具,可以看出来你的模型长什么样子。



我们这边有一个 Hello World 的程序,就是一个简单的代码,最重要的就是 session,这个是很关键的一个东西。它怎么样说明变量呢?其实它会说明一些常量或者一些变量,都是有一些很常见的说明方法。这边我们定义了 input 1 和 input 2。这里有一个需要注意的地方就是要对这个变量进行初始化,初始化之后才能使用这个变量。第二个是我加入了一个算法,把我们刚才定义的 input 1 和 input 2 加起来,是一个很简单的例子。这边定义了一个 writer,最后一句就是真正开始运行起来了。



运行完了之后,刚才也讲到了 tensorboard,这个是默认的一个端口,启起来之后,右边是一个目录的效果,大家可以看到 inprt 2,这边有一个加法。你把每个图形展开之后就是是生成随机数的方法,里面都是它生成的细节。当这个模型很复杂的时候,这个东西是很有帮助的,可以很直观地来理解这些东西之间的关系,这样看起来会很方便。



刚才也说了 TensorFlow 它开源,它很快,它支持的框架很多等众多优点。但其实它也不是万能的,每一个新的东西出来它都是解决了部分的问题。


我们可以看到深度学习对于计算资源的需求是非常庞大的,现在有一个叫 Inception — v3 的模型,它这个模型大概长这个样子,就是深度神经网络的一个模型,它里面大概有 2500 万的参数需要去调整。当它执行这样一次训练过程,大概需要执行 50 亿次的加法或者是乘法的操作,当你真正地遇到实际问题的时候,你的模型就会非常的庞大,它带来的实际计算的需求也会非常惊人。



还有就是它的神经网络的模型是非常复杂的,它很难去优化,这边举出一个例子,我们把刚才 Inception — v3 的模型,在单个 GPU 上训练达到 78% 的正确率,大概需要半年时间。这个在我们真正的工作当中是不能容忍的,半年的时间才知道我这个模型跑出什么结果,公司可能都已经不存在了。



我们这边其实利用了 TensorFlow 和 Kubernetes 结合来解决了真正遇到的问题,我们接下来会给大家简单地介绍一下怎样把一个分布式的 TensorFlow 跑起来。我们先讲一下在单机上面怎么跑,我们这边有一个机器,它的名字叫 job:local,它其实是一个 task:0,它里面 CPU 和 GPU 各有一块。我们首先在 CPU 上保存变量,然后在 GPU 上面进行计算,这样会更快地得到我们的结果。


output 简单地进行一个乘法,把这个和变量 1 做一个乘法,和变量 2 进行一个加法。我们同时要计算一下我们的损失函数,大家可以理解我用损失函数来评估我计算出来的结果和我预期之间的差,当这个差越小的时候说明它越接近我的预期。



这边要给大家引入一个叫 Worker 和 PS 的概念,Worker 可以理解为真正干活的人,真正做计算的工作。PS 是一个参数服务器,它用来保存我们整个模型当中的变量,它其实是不干活的,只是放变量的一个地方,Worker 会去拉这个模型,更新一些计算,把这个更新后的变量放到 PS 上面。这个怎么实现呢?这边有一个 device,这个是固定的东西,我告诉它我是在 PS 上面跑的。在 worker 后面也是同样的,只是真正的 CPU 变成了 GPU。刚才两个机器也是不变的,改变就是在这个地方变了一下。这样的话,就把不同的事情分配到了不同的机器上来做。



这边其实 TensorFlow 底层是用 gRPC 来执行工作的,这个给大家提一句。这个地方有问题吗?就是怎么样把不同的东西放到不同的设备上来跑。



这边做一个简单的总结,PS 就是放一些变量,来更新一些参数。Worker 做的事情就很多了,包括一些数据的预处理等等,这都是需要用到的计算的事情,这样的计算就是让它的数据更接近我们的预期。现在我们有了两个 Worker,大家看一下这边的代码,对于 PS 来说其实跟刚才的场景是一模一样的,没有什么变化,把我的参数都放到这个上面去。这个时候我定义了一些 inputs,大家可以理解为一些训练的数据集,我要传递给这个模型,让它基于这些训练的数据集来定义我想要的结果。


outputs 我们定义了一个数组来保存,这边有一个 for 很简单,这个 for i in 其实就是在两台不同的机器上来分做不同的事情。这边的 device 跟刚才一样,只不过这边是叫 task:0,这边叫 task:1,这边把完整的语句拼出来了。我会把所有计算出来的结果存储到这个里面,损失函数的计算还是一样的,它是基于一个输出的计算。


PS 和每个 Worker 之间是单独通讯的,两个 Worker 之间是不通讯的,只有 PS 和 Worker 之间是通讯的。



现在我们深入地看一下分布式的 TensorFlow 是怎么跑起来的,刚才在那个里面跟大家说了一下,tf 里面 Session 是一个比较重要的概念,这边是做一些初始化的工作,按照我设定好的一个训练步骤,就是这样一个变量执行一个具体训练的操作,其实代码都是伪代码。这个过程就是怎样在单机上面跑一个训练的过程。


现在我们有两台机器,是在一个集群里面,在这个上面还是要有一个 Session 的,它是一个很基本的东西。它们是怎么互相发现的呢?在两台机器里面会取一个 Server,这边一个,这边一个,它们两个是通过这个 Server 进行通讯的。我们假设左边是 1.100,这边是 1.101 机器,这边的机器我们是用来干活的,右边这台机器是用来存参数和模型的。首先我们要定义一个 clusterSpec,我定义了一个 ClusterSpec 之后,我要把这个传进来,要告诉我这个机器到底是第几台 Worker 或者是第几台 PS。在这个 PS 上面,其实是不需要申明这个 Session 的,它只要调用这个方法,等在那儿就可以了,等着这个 Worker 来跟它通讯,就 OK 了。



现在我们讲一下怎么把它跑在 Kubernetes 上面,如果大家有什么问题不清楚的也可以问一下,我可以简单地给大家介绍一下。这边我们有两个 PS,大家可以认为是两台参数服务器,下面是三个干活的人,它们上面分别保存了不同的参数,现在就是要不停地调整参数。每个 Worker 和 PS 之间是有线联系的,是可以互相通讯的,但是 Worker 和 Worker 之间是不联系的,Worker 我们是跑在 Pod 里面的。这些参数服务器之间是要有一个共享存储的,我们这边是用的一个分布式的存储,它其实也是用到 Kubernetes 和 PV 和 PVC 进行一个存储化的工作。


这边简单地总结一下,我们用到 Kubernetes 的一些 Deployment 和 Pod 进行一些生命周期的管理,网络方面用 Service 做服务发现,存储是用 PV 和 PVC 做一些存储持久化,最下面是用一些分布式的存储来搭建这样一个基础服务。



这边可以看到物理层其实有很多的计算资源,CPU、GPU,中间用 Kubernetes 把整个的物理机给管理起来,在 Kubernetes 的上面跑的是 TensorFlow,有计算,中间有通讯的过程。



下面介绍一下我们的 Taas 是怎么工作的,Taas 是搭载在微软的公有云上面,在它的上面我们会搭建一个集群,在它的上面我们把 TensorFlow 跑起来。



https://taas.caicloud.io 这个网址大家可以记一下,我们现在这个平台是在内测的阶段,大家可以关注我们的微信公众号,大家可以申请自己的帐号,可以自己来玩一下。


这个公有云已经是在内部测试的阶段,我们会邀请我们大学里的合作伙伴,或者工业界的一些合作伙伴,给他们一些类似的帐号来用,大家如果感兴趣可以自己去申请,在 6 月底大概会开放出来这样一个平台。


本文转载自才云 Caicloud 公众号。


原文链接:https://mp.weixin.qq.com/s/H3hHOQjGKM2nCdQKTQwZwQ


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-03-05 20:11523

评论

发布
暂无评论
发现更多内容

从源码分析 MySQL 身份验证插件的实现细节

快乐非自愿限量之名

MySQL 数据库 sql 源码

永不停止,永远在路上!MIAOYUN 2023年度回顾

MIAOYUN

2023年度回顾 2023年终总结 年度关键词 年度成绩单

实录分享 | 央企大数据平台架构发展趋势与应用场景的介绍

Alluxio

人工智能 大数据 构架 Alluxio 央企

Mixtral 8X7B MoE模型基于PAI的微调部署实践

阿里云大数据AI技术

2023年Gartner® DevOps平台魔力象限发布,Atlassian被评为“领导者”

龙智—DevSecOps解决方案

DevOps

Atlassian版本选择趋势是上云还是本地部署?全面分析两个版本的特性

龙智—DevSecOps解决方案

DevSecOps Atlassian

打通商城与ERP系统,实现物料自动同步

聚道云软件连接器

案例分享

海外直播专线:打通TikTok直播的畅通通道

Ogcloud

海外直播专线 Tik Tok直播 Tik Tok直播网络

共话 AI for Science | 解放军总医院医学创新研究部刘晓莉:基于数据和知识驱动的临床预测模型的构建

ModelWhale

人工智能 机器学习 深度学习 预测模型 AI4S

Archicad 27 for Mac(3D建模软件)v27.1.1 (4030)激活版

iMac小白

京东商品详情API实现实时数据获取的Java代码示例

Noah

共话 AI for Science | 中国自然资源航空物探遥感中心于峻川:“AI+遥感”技术地学应用实践与展望

ModelWhale

人工智能 机器学习 深度学习 AI4S

如何优雅的对ILogger进行扩展并实现日志分类及追踪

多态丶

netcore 扩展 logger dotnetcore 结构化日志

解锁 AI 潜力 | 使用 GreptimeAI 深入观测 OpenAI 行为和用量

Greptime 格睿科技

数据库 LLM LLMOps

虚幻引擎nDisplay教程:如何同步nDisplay节点与Switchboard + Helix Core

龙智—DevSecOps解决方案

电商新趋势:解析养号的必要性及海外云手机运用攻略

Ogcloud

云手机 海外云手机 跨境电商云手机

铭文 LaunchPad 平台 Solmash 推出早鸟激励计划

长安区块链

Jenkins入门知识:什么是Jenkins?以及它的历史与发展

龙智—DevSecOps解决方案

Boxy SVG for Mac(矢量图编辑器)v4.21.1免激活版

iMac小白

流式湖仓增强,Hologres + Flink 构建企业级实时数仓

Apache Flink

腾讯云ES RAG最佳实践:百行代码轻松实现帮助文档的智能问答

腾讯云大数据

ES

IITO-IPQ6010 WIFI router support-What is the relationship between VAP-AP-STA?

wifi6-yiyi

iiot vap

RetsCloud AppLink适用的场景有哪些?

RestCloud

零代码 自动化集成 适用场景

程序员一定要知道的限流大法:令牌桶算法

不在线第一只蜗牛

程序员 高并发 限流

华为产品创新经验,帮你成为更好的产品创新者

华为云PaaS服务小智

学习 华为云

软件测试/测试开发/全日制/测试管理丨App 自动化测试的价值与体系

测试人

软件测试

PullTube for Mac(在线视频下载器)v1.8.5.23中文激活版

iMac小白

ByConity 社区回顾|ByConity 和开发者们一起展望未来,携手共进!

字节跳动开源

大数据 开源 字节跳动 社区 回顾

海外云手机助力企业拓展海外市场

Ogcloud

云手机 海外云手机

PaaS服务的零代码开发平台——JNPF

这我可不懂

软件开发 低代码 JNPF

提升源代码安全性的C#和Java深度混淆工具——IpaGuard

Caicloud 岑鹏浩:TensorFlow on Kubernetes_文化 & 方法_才云科技_InfoQ精选文章