June 16, 2025

FeatureStore学习总结

FS Summit 23 from youtube

wechat – wechat’s feature platform for real-time recommender systems – FS Summit 23

摘要

分享了微信推荐在线场景获取特征方面的并行优化技术,数据格式采用Arrow。online阶段获取feature,有些操作因为成本规模的因素,必须online实时操作:过滤、拼接(user with item)、排序与聚合、数值转换(不同模型方法不同)。微信的请求模式:每个请求包含一个 user ID 和多个 items(理解为对 items 进行排序,使得更适合该 user)。这个场景适合做向量计算与编译优化。

理解向量计算:

首先理解传统的矩阵运算,举个例子,假如每个 item 都有一个 float 类型的特征,那么可以把所有 items 的该特征当成一个vector(列向量),然后跟 user 的一个 float 类型的特征(标量)做点积,得到一个新的向量,新的向量每个元素的值就是 items 相对这个 user 的得分(可按照得分进行排序,展现给用户)。扩展到 item 有很多列,此时 N 个 item 的 M 个特征构成一个 N*M 的矩阵,user 有 M 个特征构成一个 M*1 的矩阵。两个矩阵相乘得到一个 N*1 的矩阵(一个向量),最终就是 item 相对 user 的分数。这是一个典型的 GPU 矩阵计算。

视频中的向量计算,意思是对所有 item 的相同特征的过程是完全一致的,可以理解为 input 不同,计算逻辑相同。可以采用并行计算的一些思路,做并行化。例如使用 CPU simd 指令集。

编译:离线训练时可能采用 python 或者 c++,因为这些代码在在线训练场景会被反复调用,所以可以优化成性能更高的代码。把这个优化过程成为编译。

知识点1

Apache Arrow

什么是 primitive array ?

知识点2

LLVM JIT & Gandiva

知识点3

GCC -ftree-vectorize

知识点4

Operator Fusion,目的是减少每次 operator 调用的开销(virtual dispatch、input validation and copy、output memory allocation)