13 | 模型服务:怎样把你的离线模型部署到线上?
该思维导图由 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-1814 - Sebastian老师好,关于推荐的机制策略里的疲劳度优化想从工程实践上想再多问一下:内容瀑布流里如何防止重复推荐?最简单的做法是直接过滤用户30分钟内曝光的内容,这种做法过于粗糙,而且忽略的用户的即时兴趣(比如点击过的内容关联的标签)。比较合适的做法是实时采集用户点击过的内容标签,根据标签再进行推荐,但是这种做法如何保证推荐内容不重复呢?从工程上有什么好的方法吗?
作者回复: 模型中加入曝光次数,或者根据曝光次数训练一个decay函数跟模型融合。
2020-11-13314 - myrfy老师您好,看到上面的介绍,对端到端的理解还不是很清楚。感觉上面介绍的pmml和tf serving都是单向的,从离线模型到线上服务,并没有体现出用端上数据反过来训练模型这个方向。是我对端对端的理解有偏差,还是框架不支持呢
作者回复: 嗯嗯,再解释一下端到端。这里跟端上数据没关系,指的是训练完后,不用经过任何诸如拆分啊,提取特征和参数啊之类的特殊步骤,训练完直接部署,不用做什么改变。 这里的端到端是这个意思。
2020-11-0513 - Teddy老师好,模型部署通常需要进行预处理,如果使用tfserving方式部署,由于不是端到端,所以一次推导请求需要进行2次进程间通信,通信开销比较大。因此想了2种方案,1. 自己用c++/go封装预处理,并且在进程中自行loadsavedmodel,这样就把预处理和模型计算放到一个进程处理,减少一次通信。2. 把预处理放入tfserving,运行到gpu机器上,但这种方式又担心浪费有限的gpu资源。并发量大的时候哪种方案好呢?
作者回复: 效率上讲肯定是1比较高效一些,但需要比较大的改动。2方便部署,确实比较浪费资源。如果可以投入比较多的时间精力,我建议去研究一下方法一,特别是在有大量embedding数据的时候,甚至可以把embedding从模型中单独提取出来,这样可以大幅减小模型大小,提高部署和serving的速度。
2020-11-19312 - Sebastian老师好,想问下在线服务是否会涉及一些推荐的机制策略?比如流量控制,多样性,疲劳度优化等等?流量控制一般又有什么手段实现?这方面有什么资料可以推荐吗?谢谢!
作者回复: 你的问题很好,但我觉得估计不好找到很高质量的资料,因为都是业界的一些工程手段。 我理解你说的流量控制应该是指对不同用户使用不同的模型或者策略生成推荐结果是吧?这是一个很好的降低复杂模型qps的角度,但我觉得更多是一个工程问题,需要你在实践中摸索总结。
2020-11-116 - Geek_3c29c3老师,你好,想问一下如果是sklearn的模型,上线就是PMML最合适不过了吧。sklearn导出到PMML格式的文件我会,后面服务器利用JPMML调用模型文件,编写预测逻辑,生成服务,然后并发调用,这一系列不太会操作,还有服务器怎么选择服务架构,对后端的东西不太熟悉,有相关的资料可以学习吗?
作者回复: 我记得jpmml的官方文档上有描述相关的过程,基于我们的java server就可以实现这一过程。 我在我的项目 https://github.com/wzhe06/CTRmodel 中也有一些相关的部分,可以参考。
2020-12-105 - fsc2016老师,有2个问题请教您。 1,模型的离线训练完,部署到线上,产生推荐结果,根据用户行为反馈数据,然后在更新模型。实际工作上模型更新频率是怎么样,是根据各推荐指标按需进行调整嘛 2,文中说TensorFlow serving部署后,需要考虑性能优化问题,这个主要是指推荐服务器高并发请求下,保证准确,及时产生推荐结果嘛
作者回复: 1.模型更新频率其实是根据你的观察确定的,比如有的公司模型可能一周才更新一次,因为发现提高更新频率也对效果没什么影响。 有的公司可能需要做实时训练,比如我知道国内某主流电商团队,更新的频率在20分钟级别。 所以根据你自己的测试结果调整,一般天级别的更新是可行的。 2. 是的。TensorFlow serving本身在高并发下有一定的性能问题,有一些坑,我知道各一线团队都在进行一些魔改。
2020-11-0924 - 嗅嗅的小胖🐷老师你好,如果是高并发大流量的场景下tfserving延迟会不会有问题,和普通的ps架构来讲那个会更好一些
作者回复: 一般来说原生的tfserving是肯定有延迟问题的。ps一般来说更轻量级,但很多模型也不好支持。总的来说serving是一个非常复杂的工程问题,没有银弹。
2021-01-213 - 啊黄黄黄老师好,我现在排序过程中利用tf-serving加载模型,这里耗时很严重有什么好的方法可以解决的嘛?
作者回复: 没有好的解决方法,tf-serving的效率问题是业界非常棘手的问题,建议持续关注业界公布的一些tf-serving优化方案,虽然非常少。。
2021-01-132 - 旦旦王喆老师好,想请问下tensorflow训练的深度模型想要离线部署到spark集群有什么好的解决办法吗?
作者回复: 不是特别理解这个需求。tensorflow是离线的,spark集群也是离线的,为什么要把tensorflow模型部署到spark集群呢?
2020-11-2342