推荐系统全栈:倒排/向量召回+DNN排序+推理引擎+后端服务

又是一年秋招季(虽然已经进行一半了),当年我也是一名每天刷校招信息的牛友,每天面对卷上天的算法赛道(现在看来当时还没那么卷),好在最终是得偿所愿。感谢牛客。

工作一段时间后再回看,校招的时候一般看的都是手撕 + 八股 + 论文 + 项目,但是最近几年校招面试也是越来越卷,面试官不仅看重选手的这些硬实力,还很看重过往经验和团队工作的契合度。然而,对于想要找搜广推算法的牛友来说,除非有比较长期的实习经历,否则很难对推荐系统的全貌有一个完全的把握,因为实在是一个太复杂的系统,涉及到数个算法、后端、前端、测试、运维、数仓团队的协作,整个流程下来可能要有几十种组件,几十个服务,几十个数据表。

为了把这些分散在各个地方的知识串起来,作为工作一段时间后的知识梳理,作为给校招同学们的参考,用Python实现了一个推荐系统的核心流程,包含倒排召回、向量召回、DeepFM训练,特征上线,模型部署、后端服务。使用到了PyTorch + Redis + Elasticsearch + Feast + Triton + Flask,一台笔记本即可运行,全部环境封在了Conda和Docker里,不会污染本地环境,可以放心食用。下面是GitHub仓库地址,里面包含所有的代码和对应的说明。

https://github.com/akiragy/recsys_pipeline

下面是一段简介:

  • Conda环境安装pandas和PyTorch模拟工业界的HDFS -> Spark -> GPU集群的离线模型训练。
  • Conda环境安装Flask模拟工业界的Spring推荐后端。
  • Docker环境安装Redis + Elasticsearch + Feast Feature Store + Triton Inference Server四个组件,用本机localhost调用Docker来模拟工业界的推荐后端RPC调用各个组件。
  • Redis用于存储召回所需的user标签和向量。
  • Elasticsearch用于构建召回所需的item标签和向量索引。
  • Feast用于存储排序所需的user和item特征。
  • Triton用作排序所需的实时打分引擎。

整个推荐系统的架构图如下,下面将分离线、离线到在线、在线三个阶段来介绍召回和排序模块的开发部署流程。

#我的求职思考##你觉得今年秋招难吗#
全部评论

相关推荐

有很多明年、后年秋招的牛友都有私信我如何拿到 offer 的,我深知自己当时从迷雾中走来的艰辛和寻找进步渠道的不易,所以在此再多说两句,希望靠我自己的微薄之力稍微打破一些信息差,让想要进步的友友们知道往哪努力,一旦找到了着力点就可以顺着走下去。要想拿到 offer,首先要分清楚着力点:实习>>项目>八股>=算法,但是从时间线上来说,首先是要有一两个拿得出手的自己的项目,然后才能拿着项目去找实习,然后才能拿着实习+项目去找秋招。项目:找准一个好方向,一直打磨一到两个精品项目,从现在就开始一直打磨到秋招(就算在实习,下班后也要自己提升自己的项目)。这两年 AI 势头迅猛,可以考虑做一些 AI 相关的项目,比如做个搜广推引擎、RAG 平台基础设施等跟 AI 沾边的热门项目,把八股文融会贯通进去(408 四件套、cpp、java、python 三选二、分布式,重要程度依次递减)。大家如果真的没有想法,也可以去看看一些计算机卖课机构在推荐什么,这里不是说让你去报他们的课,而是可以把他们的大纲 copy 下来,看看目前市场上火热的方向是什么,找一个自己感兴趣的按照大纲自己从零开始做,毕竟现在 LLM 这么发达,只要有了思路,实现啥的都是小 case。实习:每年 2 月份之后就要开始投递,一直投递到 6 月份都可以,直到拿到一份看得过去的 offer。直接去大厂校招官网投递就可以,对于普通学生来说,有实习>>没实习,只要有大厂的面试官愿意让你去,无论是日常实习和转正实习都值得,甚至有时候 大厂的日常实习>>中小厂的转正实习。而且不要怕,有友友觉得大厂 bar 这么高,会不会我一投就挂呀。我只能说不存在。因为大厂大缺牛马,反而 hc 会比中小厂多得多,而且很多大厂对实习生招聘是很友好的(正职就是另一回事)。所以不要再投递之前就自降身价,项目差不多了猛猛冲就可以了。八股:和背单词一样,不断重复,不断刻意练习,没事就多想多背,一直背到秋招。网上有很多精品的八股网站,例如小林 coding、JavaGuide、代码随想录啥的,只要自己能看下去,觉得写的自己能理解,就狠狠吸收,此外 B 站上也有很多教你背八股的 up 主,比如猪哥、面试鸭等等,这些平时没事刷到了就可以看一下,就跟刷短视频一样,只要时间久了一直坚持下去,知识就会自己吸收进去,面试时甚至潜意识就能说出来。算法:和八股类似,没事多练,一直练到秋招。算法一般在面试中不会出太难,******** medium 难度,所以针对性刷就可以,比如 codetop 就是不错的选择,它不会像 ******** 那样按题号来,而是按面试被问到的频率来,针对性会更强,此外对于 ******** hot 100,网上对其评价也是褒贬不一的,我个人感觉刷这个性价比不高,不如把 codetop 前 10 页给刷熟练了。对于一些大厂特别难的笔试,我觉得这个就看缘分了,就跟高考做数学压轴题一样,会就是会,不会再刷提升也有限。所以这个就顺其自然就好。如果想练的话有个叫 kamacoder 的网站,里面就是专门收录大厂笔试题的,这个大家看看就好,此外还有微信上的一些公众号是专门收录大厂笔试题的,比如万诺 code、牛马 code,它不仅会收录原题,而且还收录思路,这个我也觉得不错。不要跟高中一样陷入到做题思维里。项目和实习才是最重要的。以上就是我这一年来准备秋招的经验,希望能给各位在路上的友友们帮助,最重要的是不要有终局思维,学校不是你最终的归宿,不要在学校里浑浑噩噩的混日子,以为有个文凭毕业就有公司抢着要,以为自己在学校做了所谓的噱头远大于本质的项目,公司就会高看你一眼,然后等秋招了投简历后才发现自己啥也不是。真正的能力是要经过选拔机制不断检验的,而不是自封的或是被所谓的通过机制认可的。想要有更好的前途需要自己选对方向,早点社会化,早点摆脱学生思维,然后去不断奋斗。共勉。
大厂面试问八股多还是项目...
点赞 评论 收藏
分享
评论
11
27
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务