深度学习推荐系统实战
王喆
Roku 推荐系统架构负责人,前 hulu 高级研究员,《深度学习推荐系统》作者
33298 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
深度学习推荐系统实战
15
15
1.0x
00:00/00:00
登录|注册

13 | 模型服务:怎样把你的离线模型部署到线上?

需要进行性能优化
易用性高
支持复杂结构的深度学习模型
PMML语言表示能力有限
通用模型部署方式
End2End训练+End2End部署
模型表达能力受限
支持复杂模型结构
隔离离线模型复杂性和线上推断效率要求
无法支持线上场景特征引入
适用性有限
适用于小用户规模或特殊应用场景
简单直接
缺点
优点
缺点
优点
缺点
优点
缺点
优点
其他模型服务方法
分享经验
TensorFlow Serving的优势和劣势
业界主流的模型服务方法
请求TensorFlow Serving获得预估结果
建立TensorFlow Serving服务
安装Docker
TensorFlow Serving
利用PMML转换和部署模型
预训练Embedding+轻量级线上模型
预存推荐结果或Embedding结果
实时模型推断
离线模型部署到线上
课后思考
小结
实战搭建TensorFlow Serving模型服务
业界主流的模型服务方法
模型服务
怎样利用模型服务把你的离线模型部署到线上?

该思维导图由 AI 生成,仅供参考

你好,我是王喆。今天我们来讨论“模型服务”(Model Serving)。
在实验室的环境下,我们经常使用 Spark MLlib、TensorFlow、PyTorch 这些流行的机器学习库来训练模型,因为不用直接服务用户,所以往往得到一些离线的训练结果就觉得大功告成了。但在业界的生产环境中,模型需要在线上运行,实时地根据用户请求生成模型的预估值。这个把模型部署在线上环境,并实时进行模型推断(Inference)的过程就是模型服务。
模型服务对于推荐系统来说是至关重要的线上服务,缺少了它,离线的模型只能在离线环境里面“干着急”,不能发挥功能。但是,模型服务的方法可谓是五花八门,各个公司为了部署自己的模型也是各显神通。那么,业界主流的模型服务方法都有哪些,我们又该如何选择呢?
今天,我就带你学习主流的模型服务方法,并通过 TensorFlow Serving 把你的模型部署到线上。

业界的主流模型服务方法

由于各个公司技术栈的特殊性,采用不同的机器学习平台,模型服务的方法会截然不同,不仅如此,使用不同的模型结构和模型存储方式,也会让模型服务的方法产生区别。总的来说,那业界主流的模型服务方法有 4 种,分别是预存推荐结果或 Embedding 结果、预训练 Embedding+ 轻量级线上模型、PMML 模型以及 TensorFlow Serving。接下来,我们就详细讲讲这些方法的实现原理,通过对比它们的优缺点,相信你会找到最合适自己业务场景的方法。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何利用模型服务将离线模型部署到线上的方法。作者首先介绍了模型服务的重要性,指出离线训练结果需要在线上实时进行模型推断。随后,作者详细讨论了业界主流的模型服务方法,包括预存推荐结果或Embedding结果、预训练Embedding+轻量级线上模型、利用PMML转换和部署模型等四种方法。 对于预存推荐结果或Embedding结果的方法,作者指出其适用于用户规模较小或特殊应用场景,但在用户规模较大的情况下,可以通过存储Embedding的方式来替代直接存储推荐结果。接着,作者介绍了预训练Embedding+轻量级线上模型的方法,指出这种方式能够隔离离线模型的复杂性和线上推断的效率要求,提高了模型的表达能力。 此外,作者还介绍了利用PMML转换和部署模型的方式,指出PMML作为一种通用的以XML形式表示不同模型结构参数的标记语言,可以作为中间媒介连接离线训练平台和线上预测平台,实现模型的转换和上线。最后,作者提到了JPMML和MLeap等开源项目,它们具备简单模型的转换和上线能力。 文章还详细介绍了如何搭建TensorFlow Serving的模型服务,包括安装Docker、建立TensorFlow Serving服务以及请求TensorFlow Serving获得预估结果的具体步骤。作者强调了TensorFlow Serving的易用性和对复杂模型的支持,但也提到了在实践中需要解决的工程问题和性能优化需求。 总的来说,本文为读者提供了不同的模型服务方法及其适用场景,以及如何选择最适合自身业务场景的方法。同时,还提供了具体的模型服务方法的实现原理和优缺点对比,为读者提供了实用的参考信息。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深度学习推荐系统实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(36)

  • 最新
  • 精选
  • 找大夫吗
    老师好 想问下模型部署到线上之后 把flink处理后的特征输入到模型,实时更新用户embedding时,如果需要用到像 ‘年龄’ 这样的基础数据 流处理平台无法提供,是不是以为着依然需要到HDFS去取‘年龄’特征,但是这样是不是会很影响线上服务的效率? 有什么好的方案呢 ?

    作者回复: 是的,大量特征还是从hdfs或者一些数据仓库中去取的。这些特征因为不用高频更新,我想通过分级存储供线上使用就好了,比如高频用户的年龄特征放到redis里面,这应该不会影响线上服务效率。

    2021-01-18
    14
  • Sebastian
    老师好,关于推荐的机制策略里的疲劳度优化想从工程实践上想再多问一下:内容瀑布流里如何防止重复推荐?最简单的做法是直接过滤用户30分钟内曝光的内容,这种做法过于粗糙,而且忽略的用户的即时兴趣(比如点击过的内容关联的标签)。比较合适的做法是实时采集用户点击过的内容标签,根据标签再进行推荐,但是这种做法如何保证推荐内容不重复呢?从工程上有什么好的方法吗?

    作者回复: 模型中加入曝光次数,或者根据曝光次数训练一个decay函数跟模型融合。

    2020-11-13
    3
    14
  • myrfy
    老师您好,看到上面的介绍,对端到端的理解还不是很清楚。感觉上面介绍的pmml和tf serving都是单向的,从离线模型到线上服务,并没有体现出用端上数据反过来训练模型这个方向。是我对端对端的理解有偏差,还是框架不支持呢

    作者回复: 嗯嗯,再解释一下端到端。这里跟端上数据没关系,指的是训练完后,不用经过任何诸如拆分啊,提取特征和参数啊之类的特殊步骤,训练完直接部署,不用做什么改变。 这里的端到端是这个意思。

    2020-11-05
    13
  • Teddy
    老师好,模型部署通常需要进行预处理,如果使用tfserving方式部署,由于不是端到端,所以一次推导请求需要进行2次进程间通信,通信开销比较大。因此想了2种方案,1. 自己用c++/go封装预处理,并且在进程中自行loadsavedmodel,这样就把预处理和模型计算放到一个进程处理,减少一次通信。2. 把预处理放入tfserving,运行到gpu机器上,但这种方式又担心浪费有限的gpu资源。并发量大的时候哪种方案好呢?

    作者回复: 效率上讲肯定是1比较高效一些,但需要比较大的改动。2方便部署,确实比较浪费资源。如果可以投入比较多的时间精力,我建议去研究一下方法一,特别是在有大量embedding数据的时候,甚至可以把embedding从模型中单独提取出来,这样可以大幅减小模型大小,提高部署和serving的速度。

    2020-11-19
    3
    12
  • Sebastian
    老师好,想问下在线服务是否会涉及一些推荐的机制策略?比如流量控制,多样性,疲劳度优化等等?流量控制一般又有什么手段实现?这方面有什么资料可以推荐吗?谢谢!

    作者回复: 你的问题很好,但我觉得估计不好找到很高质量的资料,因为都是业界的一些工程手段。 我理解你说的流量控制应该是指对不同用户使用不同的模型或者策略生成推荐结果是吧?这是一个很好的降低复杂模型qps的角度,但我觉得更多是一个工程问题,需要你在实践中摸索总结。

    2020-11-11
    6
  • Geek_3c29c3
    老师,你好,想问一下如果是sklearn的模型,上线就是PMML最合适不过了吧。sklearn导出到PMML格式的文件我会,后面服务器利用JPMML调用模型文件,编写预测逻辑,生成服务,然后并发调用,这一系列不太会操作,还有服务器怎么选择服务架构,对后端的东西不太熟悉,有相关的资料可以学习吗?

    作者回复: 我记得jpmml的官方文档上有描述相关的过程,基于我们的java server就可以实现这一过程。 我在我的项目 https://github.com/wzhe06/CTRmodel 中也有一些相关的部分,可以参考。

    2020-12-10
    5
  • fsc2016
    老师,有2个问题请教您。 1,模型的离线训练完,部署到线上,产生推荐结果,根据用户行为反馈数据,然后在更新模型。实际工作上模型更新频率是怎么样,是根据各推荐指标按需进行调整嘛 2,文中说TensorFlow serving部署后,需要考虑性能优化问题,这个主要是指推荐服务器高并发请求下,保证准确,及时产生推荐结果嘛

    作者回复: 1.模型更新频率其实是根据你的观察确定的,比如有的公司模型可能一周才更新一次,因为发现提高更新频率也对效果没什么影响。 有的公司可能需要做实时训练,比如我知道国内某主流电商团队,更新的频率在20分钟级别。 所以根据你自己的测试结果调整,一般天级别的更新是可行的。 2. 是的。TensorFlow serving本身在高并发下有一定的性能问题,有一些坑,我知道各一线团队都在进行一些魔改。

    2020-11-09
    2
    4
  • 嗅嗅的小胖🐷
    老师你好,如果是高并发大流量的场景下tfserving延迟会不会有问题,和普通的ps架构来讲那个会更好一些

    作者回复: 一般来说原生的tfserving是肯定有延迟问题的。ps一般来说更轻量级,但很多模型也不好支持。总的来说serving是一个非常复杂的工程问题,没有银弹。

    2021-01-21
    3
  • 啊黄黄黄
    老师好,我现在排序过程中利用tf-serving加载模型,这里耗时很严重有什么好的方法可以解决的嘛?

    作者回复: 没有好的解决方法,tf-serving的效率问题是业界非常棘手的问题,建议持续关注业界公布的一些tf-serving优化方案,虽然非常少。。

    2021-01-13
    2
  • 旦旦
    王喆老师好,想请问下tensorflow训练的深度模型想要离线部署到spark集群有什么好的解决办法吗?

    作者回复: 不是特别理解这个需求。tensorflow是离线的,spark集群也是离线的,为什么要把tensorflow模型部署到spark集群呢?

    2020-11-23
    4
    2
收起评论
显示
设置
留言
36
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部