写点什么

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

  • 2017-12-06
  • 本文字数:3802 字

    阅读完需:约 12 分钟

奇虎 360 今日宣布开源深度学习调度平台 XLearning,项目开源地址: https://github.com/Qihoo360/XLearning

XLearning 由 360 系统部大数据团队与人工智能研究院联合开发,基于 Hadoop Yarn 完成了对 TensorFlow、MXNet、Caffe、Theano、PyTorch、Keras、XGBoost 等常用深度学习框架的集成。平台上线运行近一年时间,经多次版本迭代更新,为各类深度学习框架的使用者提供了统一、稳定的作业提交平台,实现了资源共享,极大的提高了资源利用率,并且具有良好的扩展性和兼容性,在公司搜索、人工智能研究院、商业化、数据中心等业务部门得到广泛使用。

我们第一时间采访了XLearning 项目负责人李远策,了解平台建设背景和设计思想。李远策,2013 年加入奇虎 360,先后参与公司 Hadoop、Spark 、深度学习等平台的建设,历经公司 Hadoop 平台高速发展及 Spark 平台从无到大规模实践及深度学习平台的落地。曾主持 数据仓库索引、MPI on Yarn、XLearning 等多个项目。工作中专注于解决平台中的各种 Bug 及用户遇到的各类问题,爱好开源,乐于学习和分享。目前主要关注 大数据索引、大数据 + 深度学习等领域。

AI 前线:_ 请问 XLearning 在 360 公司的研发历史是什么样的?起初是为了解决什么问题?目前在 360 公司有哪些应用场景?_为什么会在现在选择开源?

李远策:人工智能技术最近两年发展迅速,以 Google 开源的 TensorFlow 为代表的各种深度学习框架层出不穷。为了能让人工智能技术更好的在公司落地,我们大数据基础机构团队联合公司人工智能研究院共同开发了 XLearning 平台。XLearning 从今年(2017)4 月份正式开始开发,经过 3 个版本的迭代,目前已经在公司的搜索、人工智能研究院、商业化、大数据中心等业务线广泛使用。深度学习技术平台化可以有效的提升 GPU 等硬件资源的利用率,节省硬件投入的成本。另外,可以让算法工程师更方便的使用各类深度学习技术,从繁杂的诸如运行环境运维等工作中解脱出来。

XLearning 的设计思路是采用 Hadoop Yarn 来调度深度学习框架,是典型的“AI on Hadoop”的实现,同行业的公司都会有类似的需求,所以我们选择开源,希望能给大家建设大数据 + 人工智能平台做个参考。

AI 前线:为什么会考虑在大数据平台的基础上集成各种深度学习框架?XLearning 可满足哪些要求,减轻哪些工作量?

李远策:在建设公司人工智能平台的架构设计上确实有多个方案可以选择,我们主要是从如下几个方面考虑的:

(1)跟现有平台的融合;公司已有的机器学习作业多数采用 Spark MLLib 和 MPI 框架,都是采用 Hadoop Yarn 进行统一调度,如果将深度学习框架也集成到 Yarn 上同时数据由 HDFS 存储,则可以实现平台的统一。

(2)运维复杂度;重新建设一个新的平台会引入新的运维工作;

(3)公司程序员的使用习惯;公司很多开发人员对 Hadoop 生态比较熟悉,直接在 Hadoop 上提交深度学习作业更容易推广;

(4)开发工作量;我们团队对 Hadoop 生态系统的组件比较熟悉,再次之前曾经实现了“MPI on Yarn”系统。可以说具备实现“AI on Hadoop”的技术储备。

XLearning 开源版本兼容社区的 Hadoop,同行公司如果有 Hadoop 平台则可以直接使用它来调度深度学习作业。如果还没有 Hadoop 平台则需要提前部署。深度学习的训练往往依赖海量的样本数据,一个可靠的大数据存储系统是训练平台的必备条件,Hadoop 部署简单、稳定可靠,是大数据平台的行业标准,推荐使用。

AI 前线:XLearning 功能设计和架构设计要点是什么?

李远策:XLearning 的系统架构图如下:

  • Client:XLearning 客户端,负责启动作业及获取作业执行状态;

  • ApplicationMaster(AM):负责输入数据分片、启动及管理 Container、执行日志保存等;

  • Container:作业的实际执行者,负责启动 Worker 或 PS(Parameter Server)进程,监控并向 AM 汇报进程状态,上传作业的输出等。对于 TensorFlow 类型作业,还负责启动 TensorBoard 服务。

XLearning 虽然架构简洁,但具有丰富的功能方便用户进行模型训练,并依托于 Yarn 提供有作业资源的统一管理。

(1)支持多种深度学习框架

XLearning 支持 TensorFlow、MXNet 分布式和单机模式,支持所有的单机模式的深度学习框架,如 Caffe、Theano、PyTorch 等。对于同一个深度学习框架支持多版本和自定义版本,满足用户个性化需求,不受限于集群机器上各学习框架的安装版本。

(2)基于 HDFS 的统一数据管理

XLearning 提供多种模式用于数据的输入、输出,包括数据的流式读写、直接 HDFS 读写等,可根据作业处理的数据量与集群机器硬盘容量,视情况决定所采用的读写方式。

(3)可视化界面

为方便用户查看作业信息,XLearning 提供可视化界面用于展示作业执行进度和输出日志等内容。作业执行完毕后,亦可查看日志内容,便于分析训练过程进展。对于 TensorFlow 类型作业,支持 TensorBoard 服务。作业运行界面大致分为三部分(如下图所示):

  • All Containers:显示当前作业所含 Container 列表及各 Container 对应信息,如 Contianer ID、所在机器(Container Host)、所属类型(Container Role)、当前执行状态(Container Status)、开始时间(Start Time)、结束时间(Finish Time)、执行进度(Reporter Progress);

  • View TensorBoard:当作业类型为 TensorFlow 时,可点击该链接直接跳转至 TensorBoard 页面;

  • Save Model:用户可在作业执行过程中,可以将当前训练模型的输出结果上传至 HDFS,并显示目前已上传的模型列表。

(4)原生代码兼容

XLearning 支持 TensorFlow 分布式模式的 ClusterSpec 自动分配构建,单机模式和其他深度学习框架代码不用做任何修改即可迁移到 XLearning 上,便于用户快速使用。

(5)Checkpoint 功能

利用深度学习框架本身的 Checkpoint 机制和直接读写 HDFS 数据功能,XLearning 方便用户实现训练恢复继续执行。

AI 前线:XLearning 在性能上有哪些优势?平台设计时考虑到了哪些易用性方面的需求?

李远策:XLearning 主要负责调度和监控工作,从原理上讲训练性能跟原生的 TensorFlow、Caffe 等框架保持一致。平台的易用性是推广的关键因素,XLeanring 做了如下考虑:

(1)与原生框架的兼容性,除了刚才说的性能保持一致外,代码也保持兼容,可以有效降低业务作业迁移的成本;

(2)Web 展示;XLearnin 调度的作业主页上会展示必要的调度信息、作业进度、日志等,同时还额外提供了随时保存中间结果的功能,方便工程师根据实际情况提前终止自己的作业;

(3)集成 TensorBoard;对于 TensorFlow 作业 XLearning 会自动拉起 TensorBoard 服务,相比之前手动启动会更简单;

(4)自动构建 TensorFlow 的 ClusterSpec;对于分布式模式的 TensorFlow 作业,工程师不再需要手动指定 worker、ps 的 host 信息,仅需要告知 XLearning 需要的 worker 和 ps 节点数即可;

这些在刚才的架构设计要点环节里也都有提到。

AI 前线:您们在开发 XLearning 有哪些经验和心得值得和大家分享的呢?

李远策:除了刚才提到的架构选型之外最想分享的经验就是:所有功能的设计都要以实际需求出发,空想出来的功能往往华而不实。XLearning 设计之初和新版本的规划过程中,都会跟公司实际用户做充分的功能需求讨论,明确大家工作的痛点,安排好优先级和 deadline 再做架构设计和开发。

AI 前线:XLearning 的开源版本和公司在使用的版本功能上是否存在差异?

李远策:坦白讲开源的 XLearning 是一个简化的版本,主要是因为受限于对 Yarn 功能的依赖。公司的 Yarn 版本,是我们在社区版本上做了不少增强。比如支持 GPU 的资源调度、GPU 通信亲和性的感知、DockerContainer 支持等。依赖于这些特性公司在用的版本多出了 GPU 资源调度支持、作业 Docker 化、临时 GPU 虚拟机、Container Metrics 可视化图表展示等功能。这些功能我们后续会通过提供 Yarn Patch 或者开源自用 Yarn 版本来分享给大家,也欢迎大家随时跟我们沟通。

AI 前线:我们知道您不仅负责了 XLearning 深度学习平台,也是 Spark 早期研究者和布道者,历经 360 公司 Hadoop 平台高速发展及 Spark 平台从无到大规模实践和落地,能否结合您的经历给大家讲述下从通用大数据平台到深度学习平台的演进历程?

李远策: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 平台的计算能力。关于这方面的工作希望能有机会跟同行的技术专家多多交流。谢谢大家!

2017-12-06 18:003829

评论

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

4 分钟优化 Fetch 函数写法~

掘金安东尼

前端 9月月更

【云原生 | 从零开始学Kubernetes】一、kubernetes到底是个啥

泡泡

云计算 云原生 k8s 9月月更

C++学习---cstdio的源码学习分析04-创建临时文件函数tmpfile

桑榆

c++ 源码阅读 9月月更

【字符串函数内功修炼】strlen + strstr + strtok + strerror(三)

Albert Edison

C语言 9月月更 strlen strstr strtok

挑战30天学完Python:Day3夯实基础-布尔值和运算符

MegaQi

9月月更 挑战30天学完Python

ESP32-C3入门教程 基础篇(三、UART模块 — 与Enocean无线模块串口通信)

矜辰所致

ESP32-C3 9月月更 UART

《简单记个笔记》之部分CSS选择器介绍

吉师职业混子

9月月更

Qt|ListWidget控件总结

中国好公民st

List qt 9月月更

【数据结构】五分钟带你了解及自定义有向图

迷彩

数据结构 算法 无向图 9月月更 有向图

《简单记个笔记》之表单标签加CSS选择器

吉师职业混子

9月月更

Python语法之数据类型

芯动大师

Python 数据类型 9月月更

【JVM】深入解读G1垃圾回收器

小明Java问道之路

并发 垃圾回收 GC G1垃圾回收器 9月月更

概述构建应用智能运维系统的核心能力

阿泽🧸

智能运维 9月月更

PLG SaaS 产品 Figma 商业模式拆解

程序员泥瓦匠

SaaS

Chrome操作指南——入门篇(五)Snippets

Augus

Chrome开发者工具 9月月更

Web3.0杂谈-#001(47/100)

hackstoic

Web3.0

监控系统的阶段建设

穿过生命散发芬芳

监控系统 9月月更

通过爬虫爬取一些图片

吉师职业混子

9月月更

Python 教程之变量

芯动大师

变量 9月月更 Python语法

【JVM】深入解析G1的并发标记与三色标记

小明Java问道之路

GC 三色标记 G1垃圾回收器 9月月更 并发标记

在windows电脑上配置kubectl远程操作kubernetes

程序员欣宸

Kubernetes 9月月更

ESP32-C3入门教程 基础篇(四、I2C总线 — 与SHT21温湿度传感器通讯)

矜辰所致

I2C I2C协议 ESP32-C3 9月月更

面试突击85:为什么事务@Transactional会失效?

王磊

Java 面试

开发者有话说|时间过得真快,我也是一个“奔三”的人了

武师叔

个人成长

面对全新的编程语言,这些思路可以帮助你察觉漏洞

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞利用

Python教程之Python简介

芯动大师

编程语言 9月月更 Python简介

开发者有话说|情分 or 本分

卷卷龙

个人成长 职场 PUA

2022-09-20:以下go语言代码输出什么?A:8 8;B:8 16;C:16 16;D:16 8。 package main import ( “unsafe“ “fmt“ )

福大大架构师每日一题

golang 福大大 选择题

2022-09-19:给定字符串 S and T,找出 S 中最短的(连续)子串 W ,使得 T 是 W 的 子序列 。 如果 S 中没有窗口可以包含 T 中的所有字符,返回空字符串 ““。 如果有不

福大大架构师每日一题

算法 rust 福大大

史上最详细vue的入门基础

楠羽

Vue 笔记 9月月更

[极致用户体验] 多页面应用里,「网页内返回」按钮,何时用 history.back 何时用 replaceState?

HullQin

CSS JavaScript html 前端 9月月更

奇虎360正式开源其深度学习调度平台,支持TensorFlow、MXNet等框架_语言 & 开发_李远策_InfoQ精选文章