360开源其深度学习调度平台,支持TensorFlow、MXNet等框架

jopen 6年前
   <p style="text-align: center;"><a href="/misc/goto?guid=4959000210567426361" title="奇虎360"><img alt="360开源其深度学习调度平台,支持TensorFlow、MXNet等框架" src="https://simg.open-open.com/show/b3c44d34e328f80afaa7835a8222977c.jpg" /></a></p>    <p>奇虎 360 今日宣布开源深度学习调度平台 XLearning,项目开源地址:<a href="/misc/goto?guid=4959011898449771195">https://github.com/Qihoo360/XLearning</a>。</p>    <p>XLearning 由 360 系统部大数据团队与人工智能研究院联合开发,基于 Hadoop Yarn 完成了对 TensorFlow、MXNet、Caffe、Theano、PyTorch、Keras、XGBoost 等常用深度学习框架的集成。平台上线运行近一年时间,经多次版本迭代更新,为各类深度学习框架的使用者提供了统一、稳定的作业提交平台,实现了资源共享,极大的提高了资源利用率,并且具有良好的扩展性和兼容性,在公司搜索、人工智能研究院、商业化、数据中心等业务部门得到广泛使用。</p>    <p>我们第一时间采访了<strong>XLearning 项目负责人李远策</strong>,了解平台建设背景和设计思想。李远策,2013 年加入奇虎 360,先后参与公司 Hadoop、Spark 、深度学习等平台的建设,历经公司 Hadoop 平台高速发展及 Spark 平台从无到大规模实践及深度学习平台的落地。曾主持数据仓库索引、MPI on Yarn、XLearning 等多个项目。工作中专注于解决平台中的各种 Bug 及用户遇到的各类问题,爱好开源,乐于学习和分享。目前主要关注大数据索引、大数据+深度学习等领域。</p>    <p><strong>AI 前线:</strong>请问 XLearning 在 360 公司的研发历史是什么样的?起初是为了解决什么问题?目前在 360 公司有哪些应用场景?为什么会在现在选择开源?</p>    <p><strong>李远策:</strong>人工智能技术最近两年发展迅速,以 Google 开源的 TensorFlow 为代表的各种深度学习框架层出不穷。为了能让人工智能技术更好的在公司落地,我们大数据基础机构团队联合公司人工智能研究院共同开发了 XLearning 平台。XLearning 从今年(2017)4 月份正式开始开发,经过 3 个版本的迭代,目前已经在公司的搜索、人工智能研究院、商业化、大数据中心等业务线广泛使用。深度学习技术平台化可以有效的提升 GPU 等硬件资源的利用率,节省硬件投入的成本。另外,可以让算法工程师更方便的使用各类深度学习技术,从繁杂的诸如运行环境运维等工作中解脱出来。</p>    <p>XLearning 的设计思路是采用 Hadoop Yarn 来调度深度学习框架,是典型的“AI on Hadoop”的实现,同行业的公司都会有类似的需求,所以我们选择开源,希望能给大家建设大数据+人工智能平台做个参考。</p>    <p><strong>AI 前线:</strong>为什么会考虑在大数据平台的基础上集成各种深度学习框架?XLearning 可满足哪些要求,减轻哪些工作量?</p>    <p><strong>李远策:</strong>在建设公司人工智能平台的架构设计上确实有多个方案可以选择,我们主要是从如下几个方面考虑的:</p>    <p>(1)跟现有平台的融合;公司已有的机器学习作业多数采用 Spark MLLib 和 MPI 框架,都是采用 Hadoop Yarn 进行统一调度,如果将深度学习框架也集成到 Yarn 上同时数据由 HDFS 存储,则可以实现平台的统一。</p>    <p>(2)运维复杂度;重新建设一个新的平台会引入新的运维工作;</p>    <p>(3)公司程序员的使用习惯;公司很多开发人员对 Hadoop 生态比较熟悉,直接在 Hadoop 上提交深度学习作业更容易推广;</p>    <p>(4)开发工作量;我们团队对 Hadoop 生态系统的组件比较熟悉,再次之前曾经实现了“MPI on Yarn”系统。可以说具备实现“AI on Hadoop”的技术储备。</p>    <p>XLearning 开源版本兼容社区的 Hadoop,同行公司如果有 Hadoop 平台则可以直接使用它来调度深度学习作业。如果还没有 Hadoop 平台则需要提前部署。深度学习的训练往往依赖海量的样本数据,一个可靠的大数据存储系统是训练平台的必备条件,Hadoop 部署简单、稳定可靠,是大数据平台的行业标准,推荐使用。</p>    <p><strong>AI 前线:</strong>XLearning 功能设计和架构设计要点是什么?</p>    <p><strong>李远策:</strong>XLearning 的系统架构图如下:</p>    <p style="text-align:center"><img alt="360开源其深度学习调度平台,支持TensorFlow、MXNet等框架" src="https://simg.open-open.com/show/04529113f38266787cf548ee2705ae92.png" /></p>    <ul>     <li>Client:XLearning 客户端,负责启动作业及获取作业执行状态;</li>     <li>ApplicationMaster(AM):负责输入数据分片、启动及管理 Container、执行日志保存等;  </li>     <li>Container:作业的实际执行者,负责启动 Worker 或 PS(Parameter Server)进程,监控并向 AM 汇报进程状态,上传作业的输出等。对于 TensorFlow 类型作业,还负责启动 TensorBoard 服务。</li>    </ul>    <p>XLearning 虽然架构简洁,但具有丰富的功能方便用户进行模型训练,并依托于 Yarn 提供有作业资源的统一管理。</p>    <p>(1)支持多种深度学习框架</p>    <p>XLearning 支持 TensorFlow、MXNet 分布式和单机模式,支持所有的单机模式的深度学习框架,如 Caffe、Theano、PyTorch 等。对于同一个深度学习框架支持多版本和自定义版本,满足用户个性化需求,不受限于集群机器上各学习框架的安装版本。</p>    <p>(2)基于 HDFS 的统一数据管理</p>    <p>XLearning 提供多种模式用于数据的输入、输出,包括数据的流式读写、直接 HDFS 读写等,可根据作业处理的数据量与集群机器硬盘容量,视情况决定所采用的读写方式。</p>    <p>(3)可视化界面</p>    <p>为方便用户查看作业信息,XLearning 提供可视化界面用于展示作业执行进度和输出日志等内容。作业执行完毕后,亦可查看日志内容,便于分析训练过程进展。对于 TensorFlow 类型作业,支持 TensorBoard 服务。作业运行界面大致分为三部分(如下图所示):</p>    <ul>     <li>All Containers:显示当前作业所含 Container 列表及各 Container 对应信息,如 Contianer ID、所在机器(Container Host)、所属类型(Container Role)、当前执行状态(Container Status)、开始时间(Start Time)、结束时间(Finish Time)、执行进度(Reporter Progress);</li>     <li>View TensorBoard:当作业类型为 TensorFlow 时,可点击该链接直接跳转至 TensorBoard 页面;</li>     <li>Save Model:用户可在作业执行过程中,可以将当前训练模型的输出结果上传至 HDFS,并显示目前已上传的模型列表。</li>    </ul>    <p style="text-align:center"><img alt="360开源其深度学习调度平台,支持TensorFlow、MXNet等框架" src="https://simg.open-open.com/show/8600c0c30a6505ec95e5631262ddade7.png" /></p>    <p>(4)原生代码兼容</p>    <p>XLearning 支持 TensorFlow 分布式模式的 ClusterSpec 自动分配构建,单机模式和其他深度学习框架代码不用做任何修改即可迁移到 XLearning 上,便于用户快速使用。</p>    <p>(5)Checkpoint 功能</p>    <p>利用深度学习框架本身的 Checkpoint 机制和直接读写 HDFS 数据功能,XLearning 方便用户实现训练恢复继续执行。</p>    <p><strong>AI 前线:</strong>XLearning 在性能上有哪些优势?平台设计时考虑到了哪些易用性方面的需求?</p>    <p><strong>李远策:</strong>XLearning 主要负责调度和监控工作,从原理上讲训练性能跟原生的 TensorFlow、Caffe 等框架保持一致。平台的易用性是推广的关键因素,XLeanring 做了如下考虑:</p>    <p>(1)与原生框架的兼容性,除了刚才说的性能保持一致外,代码也保持兼容,可以有效降低业务作业迁移的成本;</p>    <p>(2)Web 展示;XLearnin 调度的作业主页上会展示必要的调度信息、作业进度、日志等,同时还额外提供了随时保存中间结果的功能,方便工程师根据实际情况提前终止自己的作业;</p>    <p>(3)集成 TensorBoard;对于 TensorFlow 作业 XLearning 会自动拉起 TensorBoard 服务,相比之前手动启动会更简单;</p>    <p>(4)自动构建 TensorFlow 的 ClusterSpec;对于分布式模式的 TensorFlow 作业,工程师不再需要手动指定 worker、ps 的 host 信息,仅需要告知 XLearning 需要的 worker 和 ps 节点数即可;</p>    <p>这些在刚才的架构设计要点环节里也都有提到。</p>    <p><strong>AI 前线:</strong>您们在开发 XLearning 有哪些经验和心得值得和大家分享的呢?</p>    <p><strong>李远策:</strong>除了刚才提到的架构选型之外最想分享的经验就是:所有功能的设计都要以实际需求出发,空想出来的功能往往华而不实。XLearning 设计之初和新版本的规划过程中,都会跟公司实际用户做充分的功能需求讨论,明确大家工作的痛点,安排好优先级和 deadline 再做架构设计和开发。</p>    <p><strong>AI 前线:</strong>XLearning 的开源版本和公司在使用的版本功能上是否存在差异?</p>    <p><strong>李远策:</strong>坦白讲开源的 XLearning 是一个简化的版本,主要是因为受限于对 Yarn 功能的依赖。公司的 Yarn 版本,是我们在社区版本上做了不少增强。比如支持 GPU 的资源调度、GPU 通信亲和性的感知、DockerContainer 支持等。依赖于这些特性公司在用的版本多出了 GPU 资源调度支持、作业 Docker 化、临时 GPU 虚拟机、Container Metrics 可视化图表展示等功能。这些功能我们后续会通过提供 Yarn Patch 或者开源自用 Yarn 版本来分享给大家,也欢迎大家随时跟我们沟通。</p>    <p><strong>AI 前线:</strong>我们知道您不仅负责了 XLearning 深度学习平台,也是 Spark 早期研究者和布道者,历经 360 公司 Hadoop 平台高速发展及 Spark 平台从无到大规模实践和落地,能否结合您的经历给大家讲述下从通用大数据平台到深度学习平台的演进历程?</p>    <p><strong>李远策:</strong>MR、Spark 这些计算框架在大多数互联网公司都有广泛的使用,能满足大多数的数据处理需求。受限于 Spark MLLib 的性能和扩展性,公司还有不少 MPI 类型的作业跑在专用的调度系统(名为 Euler)上。为了实现调度的统一和服务器资源的复用,我们团队开发了 Euclid(MPI on Yarn)系统,初步统一了机器学习作业和大数据作业的统一调度。然后到了深度学习阶段,我们最初也走了些弯路。比如我们最早在 2016 年下半年开发了一款名为 SparkFlow(TensorFlow on Spark)的系统,可以把 TensorFlow 集成到 Spark 中,通过 RDD 完成数据的交互。后来 Yahoo 研究院也开源一个“TensorFlowOnSpark”,实现原理基本类似。受限与 Spark 本身的问题,并不适合做 PS 架构,另外与原生 TensorFlow 代码兼容性也很难做到完全兼容,在推广过程中遇到了很多的问题。重新考虑后我们开发了“TensorFlow on Yarn”,试行成功后为了兼容其他的深度学习框架就演化成了现在的 XLearning。后续我们会继续沿着统一调度的方案前行。目前平台还有很多问题需要继续探索,比如我们正在设计的更高性能的算法库,希望能无缝替换现在的 Spark MLLib,进一步提升公司 AI 平台的计算能力。关于这方面的工作希望能有机会跟同行的技术专家多多交流。谢谢大家!</p>    <p>来自: <a href="/misc/goto?guid=4959011898557966926" id="link_source2">InfoQ</a></p>