解决数据科学一公里问题-Clipper简介

对于数据科学问题来讲,我们面临的挑战是什么? 是数据准备?是特征选取?还是算法选择?这些固然都很重要,但真正的挑战在于如何将构建好的模型应用于生产,高效的运行并产生价值。也就是如何有效解决数据科学最后一公里的问题。

随着智能数据时代的到来,越来越多的企业都开始建立自己的数据管理平台,建立自己的数据科学团队,期望结合自身的业务场景,构建解决业务问题的模型。随着数据科学工作的开始,大家往往都会面临一个问题,就是如何能够高效的将训练好的模型推到生产环境,也就是前面提到的数据科学的最后一公里的问题。在我们接触的很多客户中,模型生产化是大家普遍拥有的共性问题,我们需要给客户提供这种能力,让客户将训练好的模型能够自动部署到生产,并且方便的被使用,从而真正兑现模型的价值。

这个关于数据科学的挑战,并非偶然,UC Berkley的RISELab(AMPLab的继承者)也发现了这个问题,并且开源了应对该问题的项目-Clipper(快船)。

Clipper是什么?

从Clipper的官网上来看,Clipper对自己的定位是:面向客户应用和机器学习模型与常用框架之间的一套预测服务系统。

另外,Clipper支持数据科学家在不改变代码的前提下,将训练代码直接部署到生产环境中。

Clipper的特性

对于数据科学家在选定的框架上训练的模型,通过几行代码就可以部署到一个现存的模型容器上,或者开发自己的模型容器;

对于正在运行的应用,可以非常容易的更新和回滚模型;

可以设定服务的延迟目标,从而保证可靠的查询延迟;

每个模型都运行在一个独立的Docker容器上,从而实现简单的集群管理和资源分配;

可将模型运行在CPU、GPU或者同时运行在二者之上;

Clipper的架构

在Clipper的架构中,包含一个模型选择层(Model Selection Layer)以及一个模型抽象层(Model Abstraction Layer)。模型选择层负责在多个竞争的模型当中根据需求动态选择和组合模型,从而能够提供更精确、更鲁棒的预测。而模型抽象层则屏蔽底层的不同机器学习框架,通过抽象出一个通用的API来方便模型上层应用对模型进行调用。

Clipper为了能够实现低延时、高吞吐率的预测,在模型抽象层引入了缓存的策略。对于每一个模型,Clipper提供一个缓存层,并且通过Adaptive Batching来提高预测的吞吐率。而对于模型选择层,则引入Straggler mitigation技术,预测的请求不会路由到比较慢的模型执行上,从而能够降低延迟。

Clipper集群

Clipper集群的实现利用了现在非常流行的容器技术。一个Clipper集群由一组相互通讯的Docker容器组成。Clipper集群的核心由三个部分组成:查询前端(Query Frontend),管理前端(Management Frontend)以及配置数据库(configuration database),如下图:

其中:

Query Frontend负责接收进来的预测请求,并将这些请求路由到部署的模型上,

Management Frontend负责管理和更新Clipper集群的内部状态,当集群需要更新时,需要通过Management Frontend的REST API发送请求,状态会更新到database当中

Configuration Database是一个运行Redis实例的容器,它存储了集群所有的配置信息。

Clipper中的模型

在Clipper环境中,每个模型都会运行在一个Docker容器中。Clipper对常用的模型运行框架提供了model deployer,从而使得常用的模型类型可以方便的进行部署。目前,Clipper支持三种类型的模型环境:纯Python, PySpark和R。在模型被部署成功之后,Clipper利用容器管理来启动容器并且建立一个模型容器与Query Frontend之间的RPC连接。

在Clipper当中,模型部署好之后并不会建立一个对外的REST服务。Clipper引入了一个应用层来负责将请求路由到模型容器中。这样使得多个应用可以路由到一个模型,也可以一个应用路由到多个模型。用户需要通过ClipperConnection.register_application来注册应用,应用注册成功之后,会对应用创建一个REST服务。

通过ClipperConnection.link_model_to_app,可以将model连接到应用上,这样对于应用的访问就能够路由到模型上了。如下图:

在Clipper当中,模型支持不同是版本,当新的版本通过deploy_model被部署时,应用会将预测请求路由到新版本的模型上。另外,用户可以通过ClipperConnection.set_model_version来回滚模型。

Clipper支持针对同一个模型复制不同的副本,从而提高模型的吞吐率。通过调用ClipperConnection.set_num_replicas,Clipper可以根据设置的副本数量来启动相应数量的模型容器,如下图:

对于模型的访问,则是通过访问应用的REST API来完成,比如:http://localhost:8080/wordcount-app/predict

从前面的描述我们可以看到,Clipper的核心是实现模型的调用与模型运行态的隔离,通过逻辑层的应用,将模型的服务以REST API或者RPC的方式对调用者开放,而Clipper内部通过应用和模型的连接来灵活的实现应用对模型的路由,从而将模型和对外的服务解耦,为满足模型服务化的性能提供了基础。而底层则利用容器化的技术来实现从训练到运行态的转换工作,降低模型部署的成本。整个设计的思路从架构上来讲,如果大家面向同样的问题做架构,估计大同小异。具体的实现,由于Clipper的目的是提供高性能生产环境预测能力,整个项目利用RUST和C++来实现核心的代码,实现代码的选择非常有Geek范儿。想一下师出同门的Spark用Scala语言实现,在大约6年前,也是非常Geek的。不得不说,伯克利出品的东西,工程能力还是比较出色的。

目前Clipper这个项目仍在快速的迭代过程中,它距离一款成熟的产品还有一定距离,大家有兴趣可以到Clipper的官方网站: http://clipper.ai/,去关注这个项目的进展。

由于数据科学最后一公里问题是个共性的问题,而且客户的需求越来越迫切,TalkingData的技术团队也在利用容器技术实现自己的模型生产部署平台,并且开始在一些客户的生产环境中进行使用,如果你也面临同样的问题,欢迎与TalkingData技术团队一起进行深入的探讨。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,914评论 2 89
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,638评论 18 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,366评论 1 92
  • 2018年1月30日 今天星期二,天气阴。 今天学校摸底考试,早上吃饭时老婆说的。看到儿子没有什么负担,老婆倒是嘱...
    王海瑞妈妈阅读 160评论 0 1
  • 面向对象(Object-Oriented,OO)的语言的一个标志,那就是它们都有类的概念,而通过类可以创建任意多个...
    SuperSnail阅读 299评论 2 1