`
m635674608
  • 浏览: 5003307 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

深度学习框架TensorFlow在Kubernetes上的实践

 
阅读更多

什么是深度学习?

 

深度学习这个名词听了很多次,它到底是什么东西,它背后的技术其实起源于神经网络。神经网络最早受到人类大脑工作原理的启发,我们知道人的大脑是很复杂的结构,它可以被分为很多区域,比如听觉中心、视觉中心,我在读研究中心的时候,做视频有计算机视觉研究室,做语言有语言所,语音有语音所,不同的功能在学科划分中已经分开了,这个和我们人类对大脑理解多多少少有一些关系。之后科学家发现人类大脑是一个通用的计算模型。

科学家做了这样一个实验,把小白鼠的听觉中心的神经和耳朵通路剪断,视觉输入接到听觉中心上,过了几个月,小白鼠可以通过听觉中心处理视觉信号。这就说明人类大脑工作原理是一样的,神经元工作原理一样,只是需要经过不断的训练。基于这样的假设,神经学家做了这样的尝试,希望给盲人能够带来重新看到世界的希望,他们相当于是把电极接到舌头上,通过摄像机把不同的像素传到舌头上,使得盲人有可能通过舌头看到世界。对人类神经工作原理的进一步理解让我们看到深度学习有望成为一种通用的学习模型。

上图给出了神经网络的大致结构。图中左侧是人类的神经元,右侧是神经网络的神经元。神经网络的神经元最早受到了人类神经元结构的启发,并试图模型人类神经元的工作方式。具体的技术这里不做过深的讨论。上图中下侧给出的是人类神经网络和人工神经网络(Artificial Neural Network)的对比,在计算机神经网络中,我们需要明确的定义输入层、输出层。合理的利用人工神经网络的输入输出就可以帮助我们解决实际的问题。

神经网络最核心的工作原理,是要通过给定的输入信号转化为输出信号,使得输出信号能够解决需要解决的问题。比如在完成文本分类问题时,我们需要将文章分为体育或者艺术。那么我们可以将文章中的单词作为输入提供给神经网络,而输出的节点就代表不同的种类。文章应该属于哪一个种类,那么我们希望对应的输出节点的输出值为1,其他的输出值为0。通过合理的设置神经网络的结构和训练神经网络中的参数,训练好的神经网络模型就可以帮助我们判断一篇文章应该属于哪一个种类了。

深度学习在图像识别中的应用

深度学习,它最初的应用,在于图像识别。最经典的应用就是Imagenet的数据集。

ImageNet是一个非常大的数据集,它里面有1500万张图片。下图展示了数据集中一张样例图片。

在深度学习算法被应用之前,传统的机器学习方法对图像处理的能力有限。在2012年之前,最好的机器学习算法能够达到的错误率为25%,而且已经很难再有新的突破了。在2012年时,深度学习首次被应用在在ImageNet数据集上,直接将错误率降低到了16%。在随后的几年中,随着深度学习算法的改进,错误率一直降低到2016年的3.5%。在ImageNet数据集上,人类分类的错误率大概为5.1%。我们可以看到,机器的错误率比人的错误率更低,这是深度学习带来的技术突破。

什么是TensorFlow

TensorFlow是谷歌在去年11月份开源出来的深度学习框架。开篇我们提到过AlphaGo,它的开发团队DeepMind已经宣布之后的所有系统都将基于TensorFlow来实现。TensorFlow一款非常强大的开源深度学习开源工具。它可以支持手机端、CPU、GPU以及分布式集群。TensorFlow在学术界和工业界的应用都非常广泛。在工业界,基于TensorFlow开发的谷歌翻译、谷歌RankBrain等系统都已经上线。在学术界很多我在CMU、北大的同学都表示TensorFlow是他们实现深度学习算法的首选工具。

上面的ppt给出了一个简单的TensorFlow程序样例,这个样例实现了向量加法的功能。TensorFlow提供了Python和C++的API,但Python的API更全面,所以大部分TensorFlow程序都是通过Python实现的。在上面程序的第一行我们通过import将TensorFlow加载进来。在TensorFlow中所有的数据都是通过张量(Tensor)的方式存储,要计算张量中数据的具体取值,我们需要通过一个会话(session)。

上面代码中的第二行展示了如何生成会话。会话管理运行一个TensorFlow程序所需要的计算资源。TensorFlow中一个比较特殊的张量是变量(tf.Variable),在使用变量之前,我们需要明确调用变量初始化的过程。在上面的代码最后一行,我们可以看到要得到结果张量output的取值,我们需要明确调用计算张量取值的过程。

通过TensorFlow实现神经网络是非常简单的。通过TFLearn或者TensorFlow-Slim可以在10行之内实现MNIST手写体数字识别问题。上面的ppt展示了TensorFlow对于不同神经网络结构的支持,可以看出,TensorFlow可以在很短的代码内支持各种主要的神经网络结构。

虽然TensorFlow可以很快的实现神经网络的功能,不过单机版的TensorFlow却很难训练大规模的深层神经网络。

这张图给出了谷歌在2015年提出的Inception-v3模型。这个模型在ImageNet数据集上可以达到95%的正确率。然而,这个模型中有2500万个参数,分类一张图片需要50亿次加法或者乘法运算。即使只是使用这样大规模的神经网络已经需要非常大的计算量了,如果需要训练深层神经网络,那么需要更大的计算量。神经网络的优化比较复杂,没有直接的数学方法求解,需要反复迭代。在单机上要把Inception-v3模型训练到78%的准确率大概需要5个多月的时间。如果要训练到95%的正确率需要数年。这对于实际的生产环境是完全无法忍受的。

TensorFlow on Kubernetes

如我们上面所介绍的,在单机环境下是无法训练大型的神经网络的。在谷歌的内部,Google Brain以及TensorFlow都跑在谷歌内部的集群管理系统Borg上。我在谷歌电商时,我们使用的商品分类算法就跑在1千多台服务器上。在谷歌外,我们可以将TensorFlow跑在Kubernetes上。在介绍如何将TensorFlow跑在Kubernetes上之前,我们先来介绍一下如何并行化的训练深度学习的模型。

深度学习模型常用的有两种分布式训练方式。一种是同步更新,另一种是异步更新。如上面的ppt所示,在同步更新模式下,所有服务器都会统一读取参数的取值,计算参数梯度,最后再统一更新。而在异步更新模式下,不同服务器会自己读取参数,计算梯度并更新参数,而不需要与其他服务器同步。同步更新的最大问题在于,不同服务器需要同步完成所有操作,于是快的服务器需要等待慢的服务器,资源利用率会相对低一些。而异步模式可能会使用陈旧的梯度更新参数导致训练的效果受到影响。不同的更新模式各有优缺点,很难统一的说哪一个更好,需要具体问题具体分析。

无论使用哪种更新方式,使用分布式TensorFlow训练深度学习模型需要有两种类型的服务器,一种是参数服务器,一种是计算服务器。参数服务器管理并保存神经网络参数的取值;计算服务器负责计算参数的梯度。

在TensorFlow中启动分布式深度学习模型训练任务也有两种模式。一种为In-graph replication。在这种模式下神经网络的参数会都保存在同一个TensorFlow计算图中,只有计算会分配到不同计算服务器。另一种为Between-graph replication,这种模式下所有的计算服务器也会创建参数,但参数会通过统一的方式分配到参数服务器。因为In-graph replication处理海量数据的能力稍弱,所以Between-graph replication是一个更加常用的模式。

最后一个问题,我们刚刚提到TensorFlow是支持以分布式集群的方式运行的,那么为什么还需要Kubernetes?如果我们将TensorFlow和Hadoop系统做一个简单的类比就可以很清楚的解释这个问题。大家都知道Hadoop系统主要可以分为Yarn、HDFS和mapreduce计算框架,那么TensorFlow就相当于只是Hadoop系统中Mapreduce计算框架的部分。

TensorFlow没有类似Yarn的调度系统,也没有类似HDFS的存储系统。这就是Kubernetes需要解决的部分。Kubernetes可以提供任务调度、监控、失败重启等功能。没有这些功能,我们很难手工的去每一台机器上启动TensorFlow服务器并时时监控任务运行的状态。除此之外,分布式TensorFlow目前不支持生命周期管理,结束的训练进程并不会自动关闭,这也需要进行额外的处理。

 

http://www.infoq.com/cn/articles/practise-of-tensorflow-on-kubernetes

分享到:
评论

相关推荐

    TensorFlow on Kubernetes的架构与实践.docx

    TensorFlow on Kubernetes是将流行的深度学习框架TensorFlow与强大的容器编排系统Kubernetes相结合的解决方案。Kubernetes在DevOps和微服务领域表现出色,并逐渐扩展到高性能计算(HPC)和人工智能(AI)领域。随着...

    深度学习框架在Kubernetes上的实践.pptx

    深度学习框架在Kubernetes上的实践 深度学习是人工智能领域的一个重要分支,它主要通过模仿人脑神经网络的工作机制来解决复杂的问题。近年来,随着计算能力的提升和大数据的积累,深度学习已经在图像识别、语音识别...

    6-1 谷歌深度学习在Kubernetes上的实践.pptx

    综上所述,谷歌深度学习框架TensorFlow与Kubernetes的结合,为大规模深度学习提供了强大而灵活的环境。借助微服务架构,我们可以构建出更加高效、可扩展的解决方案,适应不断变化的业务需求。同时,Kubernetes提供的...

    google基于Kubernetes上深度学习入门到实践

    在本文中,我们将介绍基于Kubernetes的深度学习实践,包括TensorFlow的简介、深度学习的动机、深度学习的应用等方面。 首先,让我们来了解什么是深度学习。深度学习是一种机器学习技术,它通过人工神经网络来模拟...

    机器学习实践手册.pdf

    05 深度学习框架TensorFlow 在Kubernetes 上的实践 13 百度PaddlePaddle 深度学习平台介绍 25 第四范式大规模机器学习先知平台的整体架构和实现细节 53 轻量级大规模机器学习算法库Fregata:快速,无需调参 67 ...

    利用开源项目 Kubernetes +TensorFlow 构建一个在深度学习平台上利用识别数字算法进行数据训练和测试.zip

    标题中的“利用开源项目 Kubernetes +TensorFlow 构建一个在深度学习平台上利用识别数字算法进行数据训练和测试”表明这是一个关于结合Kubernetes和TensorFlow,用于实现深度学习中数字识别任务的项目。Kubernetes...

    Kubernetes最佳实践案例.docx

    Kubernetes 支持大数据处理框架如Spark,以及机器学习框架如TensorFlow的部署。通过Kubernetes,可以轻松地扩展计算资源,以适应大数据处理和训练任务的需求。 **Serverless** Kubernetes 与函数即服务(FaaS)平台...

    微博在线机器学习平台的Kubernetes技术实践.pdf

    微博作为中国知名的社交媒体平台,其在线机器学习平台在Kubernetes技术的应用上有着丰富的实践。微博的AI业务涉及多个领域,包括多媒体内容理解、点击率预测(CTR)任务、关注排序、热门推荐等,这些都需要高效的...

    针对分布式深度学习训练的Kubernetes集群网络拓扑调度算法.pdf

    而深度学习框架,如Tensorflow、Pytorch等,为开发者提供了丰富的工具和库,使得深度学习模型的开发和训练变得更加便捷。通过Kubernetes集群调度算法的优化,这些模型能够更有效地在分布式环境下进行训练,从而...

    微博在线机器学习平台的Kubernetes实践.pdf

    它基于Kubernetes,不需要用户掌握k8s的专业知识,可以快速启动深度学习任务,支持tensorflow、caffe、horvod、pytorch等主流深度学习框架。Arena的简单性使得数据科学家可以在一分钟内启动深度学习任务。 在微博AI...

    1-3+TensorFlow技术发展与落地实践.pdf

    TensorFlow是由谷歌开发的开源深度学习框架,它在深度学习社区中占据了重要地位,为开发者提供了强大的工具来构建和部署各种复杂的深度学习模型。TensorFlow的发展历程可以从其前身DistBelief中看出,DistBelief是一...

    微博在线机器学习平台的Kubernetes实践.pptx

    在深度学习方面,微博对比了自家的weilearn框架和Arena框架。weilearn是一个深度学习训练框架,适用于CTR样本、自然语言样本和视频图像样本的处理,支持多种模型如VGG、Yolo、InceptionResNet等。而Arena则提供了...

    云深度学习平台架构与实践

    云深度学习平台架构与实践 随着人工智能技术的快速发展,深度学习作为人工智能领域的一个重要分支,已经广泛...小米公司在这一领域进行了积极的探索和实践,其经验值得其他企业在构建自己的云深度学习平台时参考借鉴。

    基于容器云的深度学习平台设计与实现.pdf

    Tensorflow是一个广泛应用的深度学习框架,它为开发者提供了构建和训练深度学习模型的工具。通过集成Tensorflow,平台能够提供一个友好的环境,使得研究人员可以专注于模型的设计和参数调整,而无需过多关注底层基础...

    tf-guide-k8s

    随着深度学习技术的发展,TensorFlow已经成为许多企业和研究机构首选的深度学习框架。然而,随着模型复杂度的增加,对计算资源的需求也越来越大,这就需要一种灵活且可扩展的平台来支持大规模的模型训练。Kubernetes...

    基于Spark和Kubernetes的机器学习平台.zip

    《基于Spark和Kubernetes的机器学习平台:深度解析与实践》 在当今信息化时代,人工智能(AI)已经成为了科技发展的核心驱动力,其中机器学习(Machine Learning)作为AI的重要分支,广泛应用于各种场景,如推荐...

    基于python与TensorFlow的电影推荐系统设计与实现

    2. **TensorFlow框架**:TensorFlow是由Google开发的一个开源深度学习库,用于构建和部署大规模机器学习模型。在电影推荐系统中,TensorFlow可以用来构建神经网络模型,进行协同过滤或矩阵分解等推荐算法的实现。 3...

    tensorflow workshop

    本工作坊旨在通过一系列理论讲解与实践操作相结合的方式,帮助参与者快速上手TensorFlow框架,并能够在实际项目中运用所学知识解决问题。通过这次工作坊的学习,参与者不仅能掌握TensorFlow的基本用法,还能深入了解...

Global site tag (gtag.js) - Google Analytics