一、TransAct V2 [2025]

《TransAct V2: Lifelong User Action Sequence Modeling on Pinterest Recommendation》

  1. user action sequences 建模已成为工业推荐系统研究中的热门焦点,特别是在点击率预测(CTR prediction )任务中。然而,工业规模的 CTR 模型通常依赖较短的用户序列,限制了其捕获 long-term behavior 的能力。此外,这些模型在 point-wise 排序框架中通常缺乏一个 integrated action-prediction task,削弱了其预测能力。它们也很少涉及在高效地 serving 大规模序列模型中的基础设施挑战。在本文中,我们介绍了 TransAct V2,这是一个用于 Pinterest Homefeed 推荐排序系统的生产模型,具有三项关键创新:

    • (1):利用超长用户序列提升 CTR 预测。

    • (2):集成 Next Action Loss function 以增强 user action forecasting。

    • (3):采用可扩展的、低延迟的部署方案,以适应 extended user action sequences 带来的计算需求。为克服延迟和存储限制,我们利用高效的数据处理策略和 model-serving 优化,实现了无缝的工业级部署。

    我们方法的有效性通过消融研究得到进一步证实。此外,广泛的离线和在线 A/B 实验证实了在包括 engagement volume 和推荐多样性在内的关键指标上的显著提升,展示了 TransAct V2 的实际影响力。

  2. 在数字时代,推荐系统已成为在浩瀚的在线信息海洋中导航不可或缺的工具。通过提供个性化推荐,这些系统不仅提升了用户体验,还推动了各行业企业的 engagement 增长和收入增长。

    Pinterest,一个领先的内容分享和社交媒体平台,充分体现了推荐系统的变革性力量。拥有数十亿的 Pins 和超过 5 亿月活跃用户的多样化用户群体,Pinterest Homefeed(如 Figure 1 所示)是灵感的主要来源,为用户提供高质量和相关性内容的推荐。首页(Homefeed)推荐系统使用三个阶段:召回(retrieval)、排序(ranking)和混排(blending)。当用户访问首页时:

    • retrieval 阶段首先根据用户的兴趣、画板(boards)和其他因素,从数十亿个 Pins 中召回数千个相关的 Pins。

    • 然后,ranking 阶段被形式化为 CTR 预测任务,通过预测其 personalized relevance 从而对这些 Pins 进行排序。

    • 最后,根据业务需求对 ordered Pins 进行混排。

    尽管 user action history 在 CTR 模型中被广泛使用,但现有方法通常难以端到端地利用 lifelong user sequences 进行 training objectives 优化。serving 成本和延迟限制通常迫使模型只能使用较短的近期 user action sequences (O(102)) ,忽略了 long-term behavioral patterns 。最近尝试解决 lifelong user sequences serving 的方案要么涉及压缩(丢失信息),要么依赖昂贵的 offline inference 和 caching (《TWIN: TWo-stage Interest Network for Lifelong User Behavior Modeling in CTR Prediction at Kuaishou》、《TWIN V2: Scaling Ultra-Long User Behavior Sequence Modeling for Enhanced CTR Prediction at Kuaishou》)。此外,这些模型通常只编码 user actions ,缺乏为提升 CTR 准确性而进行 next-action prediction 所需的表达能力。

    在本文中,我们提出了 TransAct V2,这是一个在 CTR 预测框架内整合 real-time user squence 和 lifelong user sequence 的新颖模型。通过采用新的 next-action prediction 任务,TransAct V2 增强了对用户偏好的理解并提高了推荐多样性。我们的系统设计能够高效处理完整的 lifelong sequence (O(104)),且具有低延迟、低存储成本和低网络成本的特点。广泛的离线实验和在线实验验证了其有效性。

    TransAct V2 目前已在 Pinterest Homefeed 的生产流量中提供服务,为超过 5 亿用户提供个性化推荐。此次部署不仅证明了该模型在提升 user engagement 方面的有效性,也展示了其在解决 real-world application 挑战方面的实用性和可扩展性方法。我们的主要贡献如下:

    • 我们介绍了 TransAct V2,这是一种 SOTA 的模型,它结合了 real-time user squence 和 lifelong user sequence ,以提高 user engagement 和推荐多样性。

    • 我们实现了一种新颖的 next-action loss,使 CTR 模型能够更好地预测用户行为,从而提高预测准确性。

    • 我们为 CTR 模型开发了 web-scale serving solutions ,确保低延迟性能和高效资源管理,并辅以全面的消融研究,突出每项优化对整体效率的贡献。

1.1 相关工作

  1. Sequential Recommendation:序列推荐模型主要通过分析过去的行为历史来捕获用户兴趣。这些模型主要分为两类。第一类旨在直接预测用户序列中的 next item ,第二类则在 CTR 框架内对用户序列进行建模。基于 Transformer 的架构通过 self-attention 机制对 item dependencies 进行建模,彻底改变了序列推荐领域(《Self-attentive sequential recommendation》、《PinnerFormer: Sequence Modeling for User Representation at Pinterest》、《BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer》)。尽管这些架构在模式识别方面非常有效,但它们通常用于 pre-training user representations,而非端到端地学习 CTR 预测,随后再应用于 item ranking 等下游任务。

    在工业应用中,推荐系统通常在 ranking 阶段使用 CTR 预测模型。最近的研究集中于使用 sequential transformer encoders 来处理 user action sequences,作为 CTR 模型的一部分。

    • 两阶段 user sequence modeling ,例如 SIM(《Search-based User Interest Modeling with Lifelong Sequential Behavior Data for Click-Through Rate Prediction》)、UBR4CTR(《User Behavior Retrieval for Click-Through Rate Prediction》)、TransAct(《TransAct: Transformer-based Realtime User Action Model for Recommendation at Pinterest》)、TWIN(《TWIN: TWo-stage Interest Network for Lifelong User Behavior Modeling in CTR Prediction at Kuaishou》),首先检索 relevant items ,然后应用 self-attention。然而,它们要么限制序列长度(限制了长期历史探索),要么依赖昂贵的 offline inference 和 caching 。

    • TWIN v2(《TWIN V2: Scaling Ultra-Long User Behavior Sequence Modeling for Enhanced CTR Prediction at Kuaishou》)尝试通过离线使用聚类算法压缩 lifelong user action histories 来解决某些挑战。然而,这种压缩可能会降低序列的表达能力,因为在压缩过程中关键信息可能会丢失。

    此外,与能够直接预测 next action 的模型类别不同,这些以 CTR 为中心的 Transformer 缺乏直接的 next-action prediction 能力。

  2. Efficient Sequential Model Serving:推荐系统通常是高吞吐量系统,受严格的延迟约束。每个 request 涉及使用序列模型对数千个 candidates 进行排序,这在实时处理 long user action sequences 时带来了挑战。因此,许多研究采用离线序列压缩(offline sequence compression)技术,如 TWIN v2 (《TWIN V2: Scaling Ultra-Long User Behavior Sequence Modeling for Enhanced CTR Prediction at Kuaishou》)和 Trinity (《Trinity: Syncretizing Multi-/Long-tail/Long-term Interests All in One》)中的聚类方法,而不是实时管理长序列。离线序列压缩方法是次优的,因为它们与被排序的 candidate 无关。使用实时用户序列使我们能够建模用户序列与 candidate 的交互,为模型提供更丰富的排序信息。值得注意的是,TWIN (《TWIN: TWo-stage Interest Network for Lifelong User Behavior Modeling in CTR Prediction at Kuaishou》)使用一个单独的模型进行压缩,需要实时模型更新。

    另一种近期方法采用生成式架构,如 HSTU(《Actions Speak Louder than Words: Trillion-Parameter Sequential Transducers for Generative Recommendations》),但这些方法通常需要拥有数万亿参数的模型才能表现良好。生成式推荐模型也比常规 CTR 模型计算开销更大。考虑到这些因素,我们的工作集中在 CTR 预测上,因为它能更有效地应对工业级 applications 典型的延迟和成本约束。

1.2 方法论

  1. 我们首先描述 ranking 模型的架构,然后探讨 lifelong sequence modeling 和 Next Action Loss 。最后,我们详细介绍 TransAct V2 的 serving 和日志系统。

1.2.1 预备知识:Ranking Model

  1. Pinterest 的首页排序模型(Homefeed ranking model )采用 point-wise 的多任务学习(multi-task learning: MTL)架构。如 Figure 2 所示,模型以 context features 、creator features 、item features 和 user features 作为输入,来预测用户交互的概率。与现有的 CTR 模型类似,它采用标准的 Wide & Deep 架构(《Wide & deep learning for recommender systems》),在应用 feature interaction layers (《Improving feature interactions at Pinterest under industry constraints》)和多层感知机(MLPs )来生成 head scores 之前,对各种特征(包括用户序列)进行编码。

  2. 每个训练样本由 pair(x→,y→)表示,其中 x→ 代表 input feature set ,y→∈{0,1}|H| 是与H 中 action heads 相关联的 label vector,H 为所有 action heads 的集合。y→ 的第 h 个元素 yh 对应于相应 action head h 的 label 。我们排序模型的核心损失函数是 weighted cross-entropy loss,专为优化 multi-label classification 任务而定制。我们将 multi-head prediction loss function 定义如下:

    LCE=∑h∈H{−wh[yhlog⁡f(x→)h+(1−yh)log⁡(1−f(x→)h)]}

    其中:

    • f(x→)∈(0,1)|H| 为每个 action head 的预测概率。f(x→)h 表示针对 action head h 的预测概率。

    • wh 为 action head h 的权重。

    除了 multi-head prediction 之外,我们还引入了 next-action prediction 作为辅助任务,通过最小化 Next Action Loss: NAL 来优化。

  3. 本文中采用的符号如下表所示。

1.2.2 TransAct V2

  1. 在本文中,我们介绍了 TransAct V2 ,这是一个基于 Transformer 的模型,它在 CTR 预测模型内整体性地结合了 real-time action sequences 和lifelong user action sequences,以提升 user engagement 和推荐多样性。实时序列通常捕获短期用户行为,聚焦于他们最近的兴趣。虽然这对即时相关性(immediate relevance)有效,但往往忽视了用户更长期的历史兴趣,导致关注范围狭窄,缺乏多样性。这种趋势可能导致回声室效应(echo-chamber effects),即用户反复接触相似内容,阻碍了他们发现新兴趣的能力。此类局限性可能对用户留存(user retention)产生不利影响,并降低整体的长期用户体验。通过整合 life-long user sequences,我们的模型旨在平衡用户的即时偏好与历史模式,从而促进更丰富的、更多样化的交互生态。这种方法不仅能提高内容多样性,还能增加持续的 user engagement。

  2. Lifelong User Sequence Features:在为 TransAct V2 构建 lifelong (LL) user sequenceSLL 时,我们专注于捕获用户在长达数年的扩展时间段(extended period)内有意义的交互行为。该序列由显式的用户行为组成,例如 repins、clicks 和 hides,不包括单纯的 impressions,以确保所捕获数据的相关性。lifelong user sequence 的最大长度是基于过去两年内用户行为历史长度按访问频率加权后的第 90 百分位数来选择的。这种加权至关重要,因为它反映了那些对 engagement 和收入贡献显著的、最频繁访问用户的行为。每个 lifelong sequence token 具有四个特征:action timestamp、action type (如果与同一 Pin 有多次交互,则为 multi-hot vector)、action surface(例如,homefeed、search),以及封装 Pin content 的 32-d PinSage embedding (《Graph Convolutional Neural Networks for Web-Scale Recommender Systems》)。当用户与同一 Pin 进行多次交互时,action type 可以表示为 multi-hot vector 。例如,用户可能先对某个 Pin 进行放大查看,随后又调整其大小。

    注意:这种 “最大序列长度选择” 方案会偏向于更长的序列。假设 90% 的用户序列长度 < 2000,但高频用户的序列长度普遍在 5000–10000。

    • 如果不加权:取 90 百分位数,那么最大序列长度为 2000。

    • 如果加权:那么 90 百分位数可能达到 8000。

    结果:模型能覆盖到高频用户的长周期兴趣。使得模型对高频用户的预测更准。

    real-time sequences SRT 和 impression sequences Simp 使用相同的特征。在这些特征中,PinSage embedding 是最大的数据组成部分。为优化存储和处理,我们应用仿射量化(affine quantization),将原始的 32 维 fp16 PinSage embedding 转换为 32 维 int8 vector,将其大小减半:

    q=clamp(e0.65,−127,+127)→int8

    缩放因子 0.65 通过对 input distribution 进行归一化,确保了精度并最小化 data loss。

  3. Modeling Lifelong User Sequence:

    • 最近邻搜索(Nearest Neighbor Search):如 Figure 3 所示,我们使用相同的 transformer encoder 处理 real-time user sequences 和 lifelong user sequences 。遵循与 TransAct(《TransAct: Transformer-based Realtime User Action Model for Recommendation at Pinterest》)类似的方法,我们首先以 candidate item(记作 c)为锚点,在三个不同的序列上执行最近邻搜索:lifelong sequence SLL、real-time sequenceSRT 和 impression sequence Simp。此外,我们始终保留最近的 r 个行为 SRT[:r],以确保模型始终都能消费用户最新的 actions ,无论这些 actions 与 candidate item 的相似度如何。

      Simp 主要是为 Next Action Loss 提供 negative samples 的。

      最近邻搜索会从每个SLL、SRT 和 Simp 中得到子序列,这些子序列与SRT[:r] 一起被拼接如下:

      Sall=NN(SLL,c)⊕SRT[:r]⊕NN(SRT[r:],c)⊕NN(Simp,c)

      其中 NN(S,c) 的计算方法是:计算 candidate PinSage embeddinge→c 与序列 S 中每个 item 的 PinSage embedding 之间的点积,然后基于相似度选择前K 个元素:

      NN(S,c)={Si∣i∈argsort(EPinSage(S)⋅e→c)[−K:]}

      其中:EPinSage(S) 为序列 S 对应的 PinSage Embedding 矩阵。

      需要注意的是,SLL 的长度为 O(104),而SRT 和Simp 都短得多,长度为O(102)。final sequenceSall 被限制在几百个元素以内(O(102)),确保通过 transformer encoder 处理的计算成本保持可控。

    • Feature Encoding:为了整合用户序列中每个 token 的元数据(action type、surface),我们使用 trainable embedding tables 将它们投影到低维向量。

      • action type sequence 被投影到 embedding matrixEact∈R|S|×dact,其中dact 是 action type embedding 的维度。

      • 类似地,surface feature 被嵌入为Esurf∈R|S|×dsurf,其中 dsurf 是 surface embedding 的维度。

      • positional encoding 被实现为一个可学习的参数 Epos∈R|S|×dpos,允许模型自适应地学习序列中的位置信息。其中 dpos 是 positional embedding 的维度。

      对于Sall 中的每个 token,我们将它的 Pinsage embedding 与 candidate pin 的 PinSage embedding e→c 拼接起来,作为我们的 early fusion 方法(《TransAct: Transformer-based Realtime User Action Model for Recommendation at Pinterest》)。为使所有组件可加,我们设置d=dact=dsurf=dpos=2dPinSage。final encoded user action sequence 通过将所有上述组件相加而成。

      F=CONCAT(E(Sall,e→c))+Eact+Esurf+Epos∈R|S|×d

      注意,d=2dPinSage ,这是因为 token Pinsage embedding 与 canddidiate Pinsage embedding 拼接起来了。

      此外,e→c 被拷贝 |S| 份,从而与序列中每个位置的 engaged pin 的 embedding 进行拼接。

    • Transformer Encoder:F 通过一个由两层组成的 transformer encoder 进行处理,每层使用单个 attention head。模型维度设置为 64,每层内的前馈网络维度为 32 。请注意,我们对 transformer encoder 应用了 causal mask 。关于超参数选择的更多细节将在实验章节中提供。transformer encoder 的输出 U=(u→0,u→1,⋯,u→|S|−1)∈R|S|×d 被用于两个下游任务:

      为什么应用了 causal mask?这是为了 next action prediction 而准备的,防止信息泄漏。

      • 第一个是 multi-head prediction 任务。如 Figure 3 所示,在 U 之上应用一个线性层和一个 max pooling layer 以产生输出。该输出将被馈送到 Figure 2 中的 feature crossing layers 以进行 multi-head prediction。

        注意:一共有 |S|+1 个向量被馈送到 feature crossing layers 。

      • 第二个任务是 next action prediction 任务,将在下一节讨论。

1.2.3 Next Action Loss

  1. 我们已经讨论了模型如何总结 user action history。为了充分利用这些用户序列信息,我们设计了一个单独的 next-action prediction 任务,训练 Transformer 来预测用户的 next action。我们的实验结果表明,这个与 multi-head prediction 并行的辅助任务显著提升了 ranking 性能。

  2. Next Action Prediction Task:具体而言,对于给定用户来自 SRT 的最近行为,我们使用经过 Transformer 处理好的时刻 t 的user embedding 来预测第(t+1) 个 pin 的 engagement 是 positive 的还是 negative 的。prediction loss 以对比损失(contrastive loss)的方式构建。对于给定用户 u,用 u(t) 表示 Transformer 的输出 U 中的第 t 列,当应用 causal mask 时,它也可以被视为用户 u 在时刻 t 的 embedding。我们使用 pu(t+1) 表示在 t+1 时刻正样本的 PinSage embedding,并使用 nu 表示用户 u 的负样本。正样本/负样本的 selection 的具体细节将在下一节讨论。next action loss: NAL,记作 LNAL,采用 sampled softmax: SSM 损失函数。sampled softmax 是对比学习中常用的技术,并已在 Pinterest 应用于学习 user representations 的推荐系统中(《PinnerFormer: Sequence Modeling for User Representation at Pinterest》)。

    L(u(t),p(t+1))=−log⁡(exp⁡(⟨u(t),pu(t+1)⟩)exp⁡(⟨u(t),pu(t+1)⟩)+∑nu=1Nexp⁡(⟨u(t),nu⟩))LNAL=∑u∑tL(u(t),pu(t+1))

    其中:N 是负样本数量;⟨⋅,⋅⟩ 表示向量内积。

    u(t) 不仅包含了 SRT 的信息,还包含了 SLL 和 SImp 的信息。

    在训练期间,LNAL 被加权后与 multi-head cross entropy loss LCE 相加:

    L=LCE+wNAL∗LNAL
  3. Next Action Loss 的关键建模设计:与允许所有 tokens 相互关注的标准 self-attention 不同,causal mask 限制 tokens 只能关注其前面的 tokens ,从而在 next action prediction 任务中防止信息泄露。例如,当预测第 t 个 action 时,模型只能访问从 0 到 t−1 的 actions 。

    next action prediction 的损失函数的选择是另一个重要方面。虽然交叉熵是 classification 任务的热门选择,但我们采用了sampled softmax loss ,因为它提供了更大的灵活性来调整正负样本的比例,从而一致地获得更好的性能。

    在样本选择方面:

    • 对于正样本,我们使用来自 SRT[:r] 的所有 positive engagement types 的 tokens。

      为什么正样本仅仅选择 SRT[:r]?论文并未说明,也没有给出消融分析。

    • 对于负样本,我们探索了两种方法:

      • 第一种是 in-batch random negative sampling,涉及从与用户 ui 同一 batch 中随机选择一个用户uj,并从uj 的序列中选择 N 个 pins。这假设同一 batch 内的不同用户通常具有不同的 engagement 兴趣。

      • 第二种是 impression-based negative sampling,从 Simp 中选择当前用户已查看但未进一步互动的 pins,这表明用户对它们的兴趣较低。

      我们在实验章节中的详细发现显示,impression-based negative samples更为有效;该方法提供了一组更具挑战性的样本,从而提升了排序性能。

1.2.4 Serving 和 Logging System 的设计

  1. 在 CTR 模型中使用 lifelong sequence 的主要挑战之一在于,由于序列长度增加而带来的显著 serving 与存储成本。设 L 代表 SLL 的长度,N 表示每个 ranking request 的平均 items 数量。在此条件下:

    • 相应的 feature 的存储成本与 O(L) 成比例。

    • 网络成本与 O(NL) 成比例。

    在本工作中,L 的规模为 O(104),这给 model serving 和网络效率带来了巨大的挑战。若没有任何优化,serving lifelong sequence 将使系统变得极其昂贵和低效。为解决 serving 延迟和存储瓶颈,我们提出了一种专为 super long user sequence models 设计的新型机器学习 data pipeline ,如 Figure 4 所示。

    这些优化确保我们的系统能够在不牺牲延迟、存储效率或模型性能的情况下处理显著更长的用户序列。

  2. Data Pipelines:排序模型使用的所有特征通常在 serving 时存储在 cache 中,并随后被 logged 到训练数据中。然而, lifelong sequence 特征过于庞大,无法高效地进行 caching 和网络传输。为解决由此产生的网络和存储成本,我们在 data pipeline 中实施了最近邻特征记录(nearest neighbor (NN) feature logging)策略,如 Figure 4所示。我们不是传输和存储整个长度为 L 的序列,而是执行公式 NN(S,c) 中详述的最近邻搜索,并仅将 relevant NN features 记录到训练数据集中。这种方法将数据存储复杂度从 O(L) 降低到 O(1),从而显著优化了资源利用率。

    我们的框架为 training 和 serving 采用了不同的数据处理 pipelines,针对两种场景进行了效率优化。

    • 在 training 期间,模型从 logged data 中消费预先计算好的最近邻特征(nearest neighbor: NN feature),显著降低了数据加载开销。这些最近邻特征被直接送入 transformer encoder 。

    • 相比之下,在 serving 期间,当接收到 ranking request 时,系统会检索目标用户的完整 lifelong sequence。当 user features 和 N 个 items 的列表被发送到模型进行推理时,我们将 lifelong sequence 特征广播到所有 items ,随后进行设备端最近邻搜索以提取相关的最近邻特征。然后,这些特征被馈入 transformer encoder 进行推理。

    这种设计平衡了存储效率、计算成本、以及 training and serving 阶段之间的一致性,确保了生产环境中的可扩展性。

    • 存储效率:Logging NN features 而非完整 lifelong sequence,最小化了存储和带宽成本。

    • Training-Serving一致性:尽管特征处理路径不同,但 NN feature representation 保持一致。

    • Inference 可扩展性:设备端实时最近邻搜索确保了工业部署环境中的可扩展性和低延迟预测。

  3. Serving Optimizations:为了在实时高 QPS 系统中 serve lifelong user sequences 而不产生巨大成本,我们共同优化了 inference server 和模型以降低延迟。

    Pinterest 的推荐模型使用定制的 C++ inference engine 和 CUDAGraph 来减少 CUDA kernel launch 开销,详见 TransAct (《TransAct: Transformer-based Realtime User Action Model for Recommendation at Pinterest》)。request 被动态batch 成 mini-batches ,在 pageable CPU memory 上准备好,复制到预先分配的 pinned memory buffer (每个 CUDAGraph 实例一个),最后从 pinned memory buffer 复制到静态的 GPU memory locations 以进行模型前向传播。

    OpenAI 的 Triton 框架最近已成为编写 custom kernels 以提高模型效率的强大工具。它已被广泛应用于大型语言模型训练以及推荐系统。Triton 允许对张量分块和 GPU L2 缓Cache(Shared Memory 或静态随机存取存储器 SRAM )进行更精细的控制,从而实现更智能的 chaching 和 in-place fused operations 。在我们的工作中,我们采用 Triton 构建 custom transformer kernels 来优化 model serving 。此外,处理 O(NL) 大小的张量可能导致大量的 CPU-to-GPU 以及 GPU 内部的数据传输。通过将昂贵的操作融合到 custom kernels 中,我们减少了 kernel calls 的次数和中间数据传输的需求,从而提高了整体 serving 效率。

    • Request Level 去重:在典型的 ranking setup 中,单个 inference request 为一个用户对 N 个 items 进行排序。request-level 特征(如 user sequences )在 CPU 上被复制(广播)到每个 item,然后传输到 GPU 进行推理。 lifelong sequence 特征在总特征大小中占据很大一部分。我们不是广播这些 request-level sequence 特征,而是引入了一种新的 sparse tensor format ,该格式存储去重后的 request-level features 和偏移量。如 Figure 5 所示,这种格式为模型提供了所有必要的元数据,使其能够在不进行广播的情况下处理 request-level sequences 。此外,我们开发了一个custom Triton kernel ,直接在去重后的 requests 上执行最近邻搜索(broadcast free NN search ),从而消除了在 GPU 上广播 request-level sequence 特征的需要。此优化使序列特征的 PCIe 数据传输减少了 8 倍。

    • Fused Sequence Dequantization:如前面章节所述,PinSage sequence 特征以量化的 int8 格式存储。在进行最近邻搜索之前,该张量必须被反量化(dequantized )为 float16 并进行归一化。在 PyTorch 中,L2 normalization 通常涉及启动四个独立的 kernels :squaring、summation 、clamping 和 division 。每个 kernel 处理这个相当大的张量,在高 QPS 下,这些操作可能成为性能瓶颈。我们将此操作与 NN search kernel 进行融合,与原生 PyTorch 实现相比,模型延迟降低了 20%。

    • Single Kernel Unified Transformer: SKUT:利用我们模型的低维度 (dmodel=64),我们开发了一种新颖的 fused transformer ,其前向传播性能比 PyTorch 快 6.6 倍。该 Transformer实现为一个 single merged custom Triton kernel。显著的延迟改进主要是通过在分块注意力(tiled attention)计算过程中动态生成 QKV sequence tensors 来实现的。前馈网络和 layer-norm 操作紧接着被 fused ,以生成 final output tile 。

      我们的 inference server 使用 Nvidia A10G GPU (8 MB 共享内存)来处理 Transformer inputs。鉴于维度较小,我们可以将所有 Transformer 权重—— 三个投影张量 Q,K,V(形状为 (64,64) )以及前馈网络权重 W1,W2⊤(形状为 (64,32) )—— 连同 input tensor 一起容纳在 6 MB 的共享内存中。这使我们能够将所有 Transformer 操作—— QKV projection 、Flash Attention、layer normalization 和 feed-forward network ——融合成一个直接在静态随机存取存储器(SRAM)上执行的 single fused operation,显著减少了 GPU 传输开销和 kernel calls 次数。

    • Pinned Memory Arena:内存区域(Memory Arena)是一个线程本地(thread-local)的、连续预分配的内存块,在连续的 inference requests 之间会被重置和重用。内存预分配(pre-allocation)确保在 inference 过程中不会动态分配 tensor memory 。在 inference 过程中,每个size = 128 的 mini-batch 会产生 64 MB 的有效载荷。这个较大的有效载荷引入了两个 copy 瓶颈—— Pageable memory 到 Pinned memory 的复制,以及 Pinned CPU memory 到 GPU memory 的复制。后者通过 request-level 去重得到了充分解决。为了补偿因这个新特性而增加的 memory pinning 的成本,我们实现了一个固定内存区域(Pinned Memory Arena)。我们的实现使用 Memory Arena with pinned memory,并直接将整理好的 mini-batches 构建在其上。这完全消除了Pageable memory 到 Pinned memory 的复制步骤,并将最终实验设置下的 inference 速度提高了 35% 。

1.3 实验

  1. 在本节中,我们将展示 TransAct V2 的广泛离线和在线 A/B 实验结果。我们使用 Pinterest 的内部训练数据,将 TransAct V2 与基线模型进行性能比较。

  2. 数据集:我们的离线训练数据集是从 Pinterest Homefeed 中两周的用户活动中收集并降采样得到的。训练数据包含 6.9 billion 个训练实例,涉及 182 million users 和 350 million Pins。模型使用随机初始化的权重从头开始训练,并在 evaluation 数据集上进行评估。evaluation 数据集是在训练数据最后一天之后的 7 天数据。

    在本文中,我们所有的实验均使用 Pinterest 数据集进行。我们的实验需要 lifelong action sequence 、real-time action sequence 和 impression sequence ,以及元数据特征,如 item embeddings、action types、surface types。据我们所知,公开可用的 CTR 预测数据集缺乏这些特征。

1.3.1 离线实验

  1. 指标:我们的模型性能使用 HIT@3 指标进行评估。a "chunk" of recommendations,记作 c=[p1,p2,⋯,pn],代表同时推荐给用户的一组 Pins 。排序模型的每个 evaluation 数据实例包括一个用户标识符 u、一个 Pin 标识符 p 、以及一个 chunk 标识符 c。为了进行评估,outputs 按用户标识符和 chunk 标识符 (u,c) 进行分组,以聚合来自同一 ranking request 的结果。在每个组内,Pins 根据 final ranking score s 进行排序,s 是 ranking 模型各heads 的输出的线性组合:

    s=∑h∈Hwhf(x→)h

    其中:H 代表 model heads 的集合,wh 是应用于每个 head 的输出的权重。

    从每个 chunk 中选取前 K 个 Pins,并计算 HIT@K,记作 γc,h,它统计了:针对 head h,前 K 个 Pins 中标签为 1 的样本数量。例如,如果按照 s 排序之后的 chunks c=[p1,p2,p3,⋯,pn] ,并且用户 repin 了 p1 和 p4,那么当 K=3 时,针对 repin 行为的 HIT@K 为 γc,repin=1。

    每个 head h 的 aggregated HIT@3 计算如下,涵盖所有用户 U 及其对应的 chunks Cu:

    HIT@3/h=∑u∈U∑c∈Cuγc,h|U|

    对于 positive engagement(例如,repin、click),HIT@K 越高越好。对于 negative engagement(如 hide),HIT@K/hide 越低越好。

  2. 结果:我们将我们提出的方法与现有的利用 user sequence 特征的 CTR 预测模型进行比较。

    • 我们首先与未整合 user sequence 特征的 Wide & Deep (《Wide & deep learning for recommender systems》)模型进行比较。

    • 此外,我们还与 BST (《Behavior Sequence Transformer for E-Commerce Recommendation in Alibaba》)和 TransAct (《TransAct: Transformer-based Realtime User Action Model for Recommendation at Pinterest》)进行比较,这两个模型都专注于 real-time sequence modeling。

    • TWIN (《TWIN: TWo-stage Interest Network for Lifelong User Behavior Modeling in CTR Prediction at Kuaishou》)未在本工作中进行比较,因为它依赖于计算昂贵的 offline inference 系统。

    • 诸如 BERT4Rec(《BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer》)等模型由于问题表述的差异,未纳入直接比较。

    如 Table 2 所示:

    • TransAct V2 同时结合了 realtime sequence 和 lifelong sequence 以及 impression-based next action loss ,取得了卓越的性能,超越了所有其他方法。它在 HIT@3/repin 上提高了 13.31%,并将 HIT@3/hide 降低了 11.25%,证明了其增强 positive user engagement 和减少 negative interactions 的能力。

    • Impression-based Negative Sampling(NALimp)对此改进至关重要。通过纳入这些 impression-based 的样本,模型受益于对用户不感兴趣内容的更细致理解,从而使 ranking model 的 calibration 更佳。因此,我们的实验证实,NALimp 与 lifelong user sequence 一起,显著提升了排序效果。

1.3.2 在线实验

  1. 在在线实验中,我们部署了离线实验中的模型。每个实验组 serve 首页页面访客的 1.5%。为保护用户体验,我们使用了 Table 2 中的强基线模型—— TransAct (RT sequence)。

  2. 指标:关键的 Homefeed 指标包括:

    • Homefeed Repin Volume:越高越好,与离线的 HIT@3/repin 相关。

    • Homefeed Hide Volume:越低越好,表明不相关的推荐,以及用户体验差。

    • 我们还考虑了 Impression Diversity:越高越好,反映更广泛的内容曝光。

  3. 在线结果:Table 3 展示了我们模型的在线性能。我们观察到:

    • NALimp 在降低 Homefeed Hide Volume 方面表现尤为出色,降低了 6.26% 。这表明使用 impression-based negative sampling 有效过滤了不相关的推荐,通过呈现更相关的内容改善了用户体验。

    • 集成了 NALimp 的 TransAct V2 取得了最佳的整体性能。具体而言,它使 Homefeed Repin Volume 显著增加了 6.35% ,表明该模型为用户提供了高度相关的推荐。此外,它使 Homefeed Hide Volume 降低了 12.80% ,进一步证明了该模型策划用户满意内容的能力。此外,该模型还提高了 Diversity ,增加了呈现给用户的内容多样性,丰富了他们的浏览体验。

1.3.3 消融研究

  1. 我们首先评估 Next Action Loss 和 transformer encoder 的设计选择。然后,我们检查 serving optimizations 的不同组件。

  2. Next Action Loss Ablation:我们展示了 NAL 的设计选择的消融研究结果。如 Table 4 所示,impression-based negative sampling 显著优于 in-batch sampling 。这是因为 impressions 提供了更强的、更具挑战性的负样本,改善了模型的泛化能力;并且至关重要的是,提高了模型预测 negative outcomes 和 reducing hides 的准确性。通过训练 Transformer 来识别并响应更细微的 negative signals ,模型实现了对用户偏好更全面的理解。额外的 NAL 消融研究见附录。

  3. Transformer 超参数:我们对 Transformer 超参数进行了广泛的调优,特别关注前馈网络维度和 input sequence 长度 |Sall|。我们的主要目标是确定能够提供最佳性能的配置,在 repin 指标和 inference 成本/延迟之间取得平衡。综合评估确定了最佳配置:序列长度 192 、2 层网络、前馈网络维度 32。这种配置在保持良好的 repin 指标和低 inference 延迟之间取得了平衡。Figure 6 显示,增加序列长度和前馈网络维度可以提高 HIT@3/repin,但会显著增加 inference 延迟。

  4. Serving Optimization Ablation :

    • Single Kernel Unified Transformer: SKUT:我们通过在序列长度 64-2048 范围内测量前向传播的延迟来评估 SKUT 的性能。使用 PyTorch 的内存高效实现作为基线,在我们的生产设置(batch size = 256,序列长度 192)中, SKUT 实现了 85.09% 的延迟降低和 13.24% 的 GPU内存占用降低。Table 5 展示了 SKUT 在不同序列长度下相对于基线实现的优势。SKUT 在不同 batch size 下也优于基线(详见附录 B)。这些增益主要来源于避免了 Q,K,V 张量的实体化。峰值延迟降低发生在序列长度为 192 时,这是由于针对 production input 形状进行了 kernel tuning 。SKUT 在更长序列下也保持了相对于 PyTorch 实现的延迟优势。值得注意的是,未直接比较 FlashAttention-2,因为它不支持自定义的 masks(为了 NAL 屏蔽 tokens 、以及 padding )。然而,我们仍在附录 B 中提供了 without masks 情况下的比较。

    • Server Optimizations:Figure 7, 8, 9 中的结果来自高吞吐量在线 serving 环境(每主机每秒 29,000个示例),旨在模拟峰值 production 流量。此设置包括并行的 inference streams 、动态的 batching、batch queuing 和 request de-duplication ,以准确反映在线延迟的减少。我们使用 P99 latency(即 99%的 requests 在 1-minute window 内完成的延迟)作为我们的评估指标。实时、低延迟系统通常监控 P99 latency,以考虑最坏情况,同时排除异常值。

      • Figure 7 展示了我们的优化对 CPU-to-GPU 复制时间的影响。PinMem 表示复制到 Pinned Memory 所产生的延迟,PCIe 指通过 PCIe 从 Pinned Memory 复制到 GPU 的延迟。结果展示了 batch size 为 128 - 512 的情况。我们报告了基线、仅仅 pinned memory arena、仅仅 request de-dup 、以及所有优化组合的消融数据,对应于每个 batch size 的 4 个柱状条。由于 pinned memory arena only 和 all enabled groups 直接在 Pinned memory 上构建 batches ,因此 PinMem 组件的值为零。通过所有优化,与基线相比,batch size = 128 时复制时间改进了 85%,batch size = 256 时改进了 82%,batch size = 512 时改进了 85%。

      • Figure 8 展示了 model inference 延迟的改进。Model Run 延迟包括 CPU-to-GPU feature copy 、model forward pass 以及 GPU-to-CPU output copy 。结果展示了 batch size 为 128、256 和 512 下,基线、pinned memory 、request deduplication 以及组合方法的对比。

        当单独测试时,Pinned Memory Arena 对延迟降低的结果为中性至略微正向。这是因为在仅启用 pinned memory arena 时,高吞吐量下该设置会受到 PCIe 带宽的限制。然而,Request de-dup only 在所有延迟和 batch size 大小下都显示出一致的降低效果。Model Run latency 的最佳降低效果是通过叠加两种优化共同实现的,与基线相比,batch size 为 128、256 和 512 的延迟分别降低了 75%、75% 和 81%。

      • Figure 9 展示了我们 final optimized setup相对于基线在 P50、P90 和 P99 延迟百分位数上的改进比率。纵轴分解了端到端 RPC 延迟:model forward、pin memory 和 PCIe copy time 、batch preparation time(CPU tensor construction )以及 queuing delay( dynamic batching wait time)。

        正如预期,model forward、pin memory 和 PCIe copy 延迟得到了改善,这与 Figure 7 和 Figure 8 中的先前结果一致。此外,request de-dup 减少了处理字节数,使 batch preparation 速度提高了 5 倍。更快的 mini-batch processing将 queuing delay 减少了 1300 倍。总体而言,端到端 inference 延迟在 P50、P90 和 P99 上分别提升了 103 倍、338 倍和 250 倍。

       

1.4 结论

  1. 本文介绍了 TransAct V2,这是一个整合 real-time user sequences 和 lifelong user sequences 以增强 CTR 预测的新颖模型。利用 next-action loss,TransAct V2 改进了 action 预测,提升了 engagement 和模型表达能力。其在 Pinterest 的实际应用部署展示了其高效管理 extensive user histories、应对延迟和存储挑战的能力。对 serving optimizations 的严格消融研究证明了延迟和存储成本的降低,A/B 测试证实了 engagement 指标的显著提升。TransAct V2 推进了序列推荐领域,为部署复杂的大型模型提供了一个稳健的框架。

二、附录

2.1 NAL 的消融研究

  1. NAL Loss Weight:我们对公式 L=LCE+wNAL∗LNAL 中的 loss weight wNAL 进行了调优。如 Table 6 所示,调整 NAL loss weight 对于维持 Next Action Loss task 和 multi-head prediction task 之间的平衡是必要的。这是因为 next action prediction 作为一个辅助任务,而 multi-head prediction 是 ranking model 的 primary objective 。

    • 若 wNAL 过大,会因 NAL 的不成比例影响而损害 multi-head prediction 。

    • 反之,若 wNAL 过小,NAL 的贡献将变得微不足道。

    基于我们的消融研究,我们确定设置 wNAL=0.01 对于我们的模型是最优的。然而,值得注意的是,最佳权重可能因不同模型和数据集而异,因为它需要适应各种应用中遇到的不同 loss values 量级。

  2. NAL Loss Type:Table 7 显示,sampled softmax loss 优于 cross-entropy loss。cross-entropy loss 通常是 classification 任务中最热门的选择,例如在我们的设置中预测 positive or negative actions。然而,sampled softmax loss 通过允许微调正负样本比例提供了更大的灵活性,如公式 L(u(t),p(t+1)) 所示。这种额外的自由度有助于持续提升性能。

    如 Table 7 所示,sampled softmax loss 相比 cross-entropy loss 带来了更优的结果。这一优势突显了调整 sampling ratios 以获得 improved classification results 的有效性。

2.2 SKUT 的消融研究

  1. Table 8 中呈现的 comparison 强调了 SKUT 在不同 batch size(固定序列长度为 192 )下相较于 PyTorch 内存高效实现的优越性。尽管 FlashAttention-2 由于不支持 custom masking 而不直接适用于我们的工作,但我们在 without mask 的情况下与 SKUT 进行了性能比较。我们的 SKUT 实现展示了显著优势,与 FlashAttention-2 transformer without attention masks 相比,延迟降低了 66.4%,内存使用减少了 5.5%。