返回介绍

数学基础

统计学习

深度学习

工具

Scala

二十二、COLD [2020 ] (Pre-Ranking 模型)

发布于 2023-07-17 23:38:24 字数 21878 浏览 0 评论 0 收藏 0

  1. 近年来,由于互联网服务的快速增长,用户一直在与信息过载作斗争。搜索引擎、推荐系统和在线广告已经成为每天为数十亿用户提供服务的基础信息检索application 。这些系统大多数遵循多阶段级联架构multi-stage cascade architecture ,即通过 matchingpre-rankingrankingreranking 等顺序模块sequential modules 来提取候选item。下图给出了一个简短的说明。

    已经有很多论文讨论如何建立一个有效effective 的、高效efficientranking 系统。然而,很少有工作关注 pre-ranking 系统。为简单起见,在本文的剩余部分只讨论展示广告系统display advertising systempre-ranking 系统的设计。这里讨论的技术可以很容易应用于推荐系统、搜索引擎等。

    长期以来,人们认为 pre-ranking 只是 ranking 系统的简化版本。

    • 一方面,考虑到在线 serving 的算力成本computing power cost挑战,需要对更大规模的候选item 集合进行排序。以阿里巴巴的展示广告系统为例。传统上,pre-ranking 系统要评分的候选集合的规模可以扩展到数万个 item,而在后续 ranking 系统中要评分的候选集合规模则变成数百个item
    • 另一方面,rankingpre-ranking 系统都有严格的延迟限制,例如 10 ~ 20 ms。在这种情况下,pre-ranking 系统通常被设计为轻量级排序系统,通过简化ranking 模型来处理在线推断的算力爆炸。
  2. pre-ranking 系统的发展历史简介:回顾 pre-ranking 系统在工业中的发展历史,我们可以简单地从模型的角度将其分为四代,如下图所示。 $ \mathbf{\vec x}_u,\mathbf{\vec x}_a,\mathbf{\vec x}_{u,a} $ 分别是 useradcross 的原始特征。 $ \mathbf{\vec e}_u,\mathbf{\vec e}_a,\mathbf{\vec e}_{u,a} $ 分别是useradcross 特征的 embedding

    • 第一代是非个性化的 ad-wise 统计得分。它通过平均每个广告的最近CTR 来计算 pre-rank scorescore 可以高频high frequency 更新。

      缺点:非个性化、无法处理新广告、曝光稀疏广告的 CTR 统计不置信。

    • 第二代是Logistic Regression: LR 模型。它是浅层机器学习时代大规模ranking 模型的轻量级版本,可以以online learningserving 的方式进行部署。

      缺点:需要大量的手工特征工程、无法捕获特征之间的非线性交互作用。

    • 第三代是基于向量内积的深度学习模型,也是目前state-of-the-artpre-ranking 模型。在该方法中,user-wise embedding 向量和 ad-wise embedding 向量分别以离线方式预计算,没有 user-ad 交叉特征,然后在线计算两个向量的内积从而获得 pre-rank score

      缺点:向量内积的方式过于简单,使得模型效果较差。

    尽管和前两代相比,基于向量内积的 DNN 显著提升了模型性能,但是它仍然面临量大挑战,还留有进一步改进的空间:

    • 模型表达能力受限。如 《Learning Tree-based Deep Model for Recommender Systems》 所述,模型的表达能力受限于向量内积形式的深度模型。
    • 模型更新频率较低。基于向量内积的 DNNembedding 向量需要离线预先计算。这意味着基于向量内积的 DNN 模型只能以低频方式更新,难以适应最新的数据分布的变化,尤其是在数据发生剧烈变化时(如双十一当天)。

    综上所述,上述三代 pre-ranking 系统都遵循相同的范式:将算力视为恒定约束,在此基础上开发了与训练系统、serving 系统相对应的 pre-ranking 模型。也就是说,模型的设计和算力的优化是解耦的,这通常会导致模型的简化以适应算力的需求。这会导致次优suboptimal 的性能。

  3. 下一代 pre-ranking 系统 COLD :在论文 《COLD: Towards the Next Generation of Pre-Ranking System》 中,作者从算法--系统协同设计co-design 的角度重新思考了 pre-ranking 系统的挑战。论文设计了一个新的 pre-ranking 系统,通过联合优化 pre-ranking 模型和它所消耗的算力来节省算力,而不是通过限制模型体系结构(这会限制模型性能)。作者将其命名为 Computing power cost-aware Online and Lightweight Deep pre-ranking system: COLD ,如上图所示。

    论文将 COLD 视为第四代 pre-ranking 系统。COLD 兼顾了模型设计和系统设计。COLD 中的算力成本也是一个可以与模型性能联合优化的变量。换句话讲,COLD 是一种灵活的 pre-ranking 系统,模型性能和算力成本之间的 trade-off 是可控的controllable

    COLD 的主要特点总结如下:

    • 具有交叉特征的任意深度模型可以在可控算力成本的约束下应用于 COLD。在论文的真实系统中,COLD 模型是一个七层全连接深度神经网络,具有 Squeeze-and-Excitation: SE blockSE block 有利于我们进行特征组的选择,以便于从复杂的ranking 模型中获得轻量级版本。该选择是通过考虑模型性能和算力成本来执行的。也就是说,COLD 模型的算力成本是可控的。
    • 通过应用优化技巧(例如,用于加速 inference 的并行计算和半精度计算),显著降低了算力成本。这进一步为 COLD 应用更复杂的深度模型以达到更好性能带来了空间。
    • COLD 模型以 online learningserving 的方式工作,为系统带来了出色的能力来应对数据分布变化的挑战。COLD 的全在线 pre-ranking 系统为我们提供了灵活的基础设施,支持新模型开发和快速的在线 A/B test,这也是目前 ranking 系统拥有的最佳系统实践。

    下图给出了所有四代ranking 系统在模型表达能力和更新频率方面的比较,其中COLD 实现了最佳的 trade-off

    2019 年以来,COLD 已经部署在阿里巴巴展示广告系统display advertising system 中几乎所有涉及pre-ranking 模块的产品中,每天为数亿用户提供高并发请求。和最新的在线的、基于向量内积的 DNN 版本相比,COLD 带来了 6% 以上的 RPM 提升,这对于业务而言是一个显著的提升。

22.1 模型

22.1.1 Pre-Ranking 系统概述

  1. pre-ranking 模块可以被视为 matching 模块和 ranking 模块之间的连接纽带:它接收 matching 结果并进行粗选,从而减少用于后续 ranking 模块的候选集的大小。

    以阿里巴巴的展示广告系统为例,输入 pre-ranking 系统的候选集大小往往达到万级。然后 pre-ranking 模型通过某些指标(例如 eCPM )选择 top N 候选 item 。 $ N $ 的量级通常为数百。这些获胜的 $ N $ 个候选 item 通过复杂的 ranking 模型进一步排序,从而得到最终结果展示给用户。

    一般而言,pre-rankingranking 具有相似的功能,二者之间最大的区别在于问题的规模。显然,pre-ranking 系统要排序的候选集合规模是ranking 系统的 10 倍或者更大。在 pre-ranking 系统中直接应用 ranking 模型似乎是不可能的,这将面临算力成本的巨大挑战。如何平衡模型性能和它所消耗的算力是 pre-ranking 系统的关键考虑因素。

  2. 基于向量内积的 DNN 模型:在深度学习成功的推动下,基于向量内积的 DNN 模型已经广泛应用于 pre-ranking 系统并实现了 state-of-the-art 性能。

    基于向量内积的 DNN 模型的架构由两个并行的子神经网络组成:用户特征被馈入到左侧子网络,广告特征被馈入到右侧子网络。对于每个子网络,特征首先输入 embedding 层,然后拼接在一起,然后是全连接FC层。这样我们得到两个固定长度的向量 $ \mathbf{\vec v}_u,\mathbf{\vec v}_a $ ,它们分别代表用户信息和广告信息。 最后,pre-ranking score $ p $ 计算如下:

    $ p = \sigma\left(\mathbf{\vec v}_u\cdot \mathbf{\vec v}_a\right) = \frac{1}{1+\exp\left(-\mathbf{\vec v}_u\cdot \mathbf{\vec v}_a\right)} $

    基于向量内积的 DNN 模型的训练遵循与传统ranking 模型相同的方式。为了关注pre-ranking 模型的关键部分,我们省略了训练的细节。

  3. 基于向量内积的 DNN 模型的pre-ranking 系统的缺点:基于向量内积的 DNN 模型在延迟latency 和计算资源方面是高效的。 $ \mathbf{\vec v}_u,\mathbf{\vec v}_a $ 的向量可以离线预先计算,score $ p $ 可以在线计算。这使得它足以应对算力成本的挑战。下图说明了基础设施的经典实现。和前几代 pre-ranking 模型相比,基于向量内积的 DNN 模型取得了显著的性能提升。

    然而,基于向量内积的 DNN 模型通过将模型限制为向量内积的形式,过于关注降低算力成本,这导致模型性能欠佳。我们总结了以下缺点:

    • 模型表达能力受限于向量内积的形式,无法利用 user-ad 交叉特征。《Learning Tree-based Deep Model for Recommender Systems》 已经表明:采用复杂的深度模型比向量内积形式网络具有显著的预测效果优势。

    • 用户向量 $ \mathbf{\vec v}_u $ 和广告向量 $ \mathbf{\vec v}_a $ 需要枚举所有用户和所有广告进行离线预计算,从而减少计算资源并优化延迟。对于拥有数亿用户和数千万广告的业务,预计算通常需要几个小时,难以适应数据分布的变化。当数据发生剧烈变化时(如双十一当天),这会给模型性能带来很大的伤害。

    • 模型更新频率也受到系统实现的影响。对于基于向量内积的 DNN 模型,用户向量索引/广告向量索引版本之间的天级切换需要同时执行,这很难满足两个索引存储在不同在线系统中的情况。根据我们的经验,延迟切换也会损害模型性能。

      如果用户向量索引切换为新版本,而广告向量索引保留为旧版本,则出现索引不一致,会严重降低在线 serving 的效果。因此用户向量索引/广告向量索引需要同时切换。

    基于向量内积的 DNN 模型的 pre-ranking 系统的这些缺点源于对算力的过度追求,并且难以完全解决。在接下来的部分中,我们将介绍我们的新的解决方案,它打破了 pre-ranking 系统的经典设计方法。

22.1.2 COLD

  1. 在这一部分,我们将详细介绍我们新设计的 pre-ranking 系统 COLDCOLD 背后的核心思想是:同时考虑模型设计和系统设计。COLD 中的算力成本也是一个可以和模型性能联合优化的变量。换句话说,COLD 是一个灵活的 pre-ranking 系统,模型性能和算力成本之间的 trade-off 是可控的。

  2. COLD 中的深度 pre-ranking 模型:基于向量内积的 DNN 模型通过限制模型架构来降低算力成本,从而导致模型性能损失。与此不同,COLD 允许应用深度模型的任意复杂架构来确保最佳模型性能。换句话说,SOTA 深度ranking 模型可以用于 COLD

    例如,在我们的真实系统中,我们将 groupwise embedding network: GwEN 作为我们的初始模型架构,它是我们ranking 系统中在线模型的早期版本。GwENfeature group-wise embedding 的拼接作为输入。注意,交叉特征也包含在 GwEN 网络的输入中。

    当然,pre-ranking 直接应用具有复杂架构的深度 ranking 模型进行在线 inference 的算力成本是不可接受的,因为要在 pre-ranking 系统中进行排序的候选集合规模更大。为了应对这一关键挑战,我们采用了两种优化策略:

    • 一种方法是设计一种灵活的网络架构,可以在模型性能和算力成本之间进行 trade-off
    • 另一种方法是通过应用工程优化技巧进行 inference 加速来显著降低算力成本。

a. 灵活网络架构的设计

  1. 一般而言,我们需要引入合适的网络架构设计,从而从初始 GwEN 模型的完整版本中得到深度模型的轻量级版本。网络剪枝、特征选择、以及神经架构搜索等技术都可以应用于此。在我们的实践中,我们选择了便于在模型性能和算力成本之间进行可控trade-off 的特征选择方法。其它技术也适用,我们留给读者进一步地尝试。

    具体而言,我们应用 Squeeze-and-Excitation: SE block 进行特征选择。SE block 首先在 CV 中用于显式建模通道之间的内部依赖性。这里,我们使用 SE block 来获得 group-wise 特征的重要性权重,并通过度量模型性能和算力成本来选择 COLD 中最合适的特征。

  2. 重要性权重计算:令 $ \mathbf{\vec e}_i\in \mathbb R^d $ 为第 $ i $ 个 feature groupembedding ,总的 feature group 数量为 $ M $ 。SE block 将 $ \mathbf{\vec e}_i $ 压缩为一个标量值 $ s_i $ :

    $ \mathbf{\vec s} = \sigma\left(\mathbf W\left[ \mathbf{\vec e}_1||\cdots||\mathbf{\vec e}_M\right]+\mathbf{\vec b}\right) $

    其中:

    • $ \mathbf{\vec s}\in \mathbb R^M $ 为一个向量,给出每个 feature group 的重要性。
    • $ || $ 为向量拼接。
    • $ \mathbf W \in \mathbb R^{M\times (dM)},\mathbf{\vec b}\in \mathbb R^M $ 为模型参数。

    然后通过 embedding $ \mathbf{\vec e}_i $ 和重要性权重 $ s_i $ 之间的 field-wise 相乘从而得到新的加权 embedding $ \mathbf{\vec v}_i = s_i\times \mathbf{\vec e} _i $ 。

    SE block 相当于让模型自动学习每个 feature group embedding 的特征重要性。

  3. feature group 选择:权重向量 $ \mathbf{\vec s} $ 代表每个feature group 的重要性。我们使用权重对所有 feature group 进行排序,并选择 top K 权重最高的feature group。然后进行离线测试,从而评估选定 Kfeature group 的模型的候选轻量级版本的模型性能和系统性能。评估指标包括 GAUCquery per seconds: QPS(衡量模型的吞吐量)、return time: RT(衡量模型的延迟)。

    通过多次启发式尝试 K 次,我们最终选择在给定的系统性能约束下具有最佳 GAUC 的版本作为我们最终的模型。这样,可以灵活地进行模型性能和算力成本之间的 trade-off

b. 工程优化技巧

  1. 除了通过灵活的网络架构设计降低算力成本,我们还从工程角度应用了各种优化技巧,进一步为 COLD 应用更复杂的深度模型带来了空间,以达到更好的性能。下面以我们在阿里巴巴的展示广告系统为例,介绍一下实践经验。情况可能因系统而异。读者可以根据实际情况做出选择。

    在我们的展示广告系统中,pre-ranking 模块的在线 inference 引擎主要包含两个部分:特征计算和稠密网络计算。

    • 在特征计算中,引擎从索引系统中提取用户和广告特征,然后计算交叉特征。
    • 在稠密网络计算中,引擎首先将特征转换为 emedding 向量并将它们拼接起来作为网络的输入。
  2. all level 的并行性:为了以低算力成本实现低延迟和高吞吐量的 inference ,利用并行计算非常重要。因此,我们的系统会尽可能地利用并行性。幸运的是,不同广告的 pre-rank 分数是相互独立的。这意味着它们可以在一些成本上并行计算,这些成本涉及到一些与用户特征相关的重复计算。

    • high level 上,一个前端user query 将拆分为多个 inference query。每个 query 处理部分广告,并在所有 query 返回后合并结果。因此,在决定拆分多少个 query 时需要 trade-off。更多的 query 意味着每个 query 的广告很少,因此单个 query 的延迟更低。但是太多的 query 也会导致巨大的重复计算和系统开销。

      即划分广告空间,从而在广告空间上并行计算。

      此外,由于 query 是在我们的系统中使用 RPC 实现的,更多的 query 意味着更多的网络流量,并且可能有更高的延迟或失败可能性。

    • 在处理每个 query 时,多线程处理用于特征计算。同样,每个线程处理部分广告以减少延迟。

    • 最后,执行稠密网络 inference时,我们使用 GPU 来加速计算。

  3. 基于列的计算:传统上,特征计算是基于行的方式完成的:广告被一个接一个地处理。然而,这种基于行的方法对cache 不友好。相反,我们使用基于列的方法将一个 feature 列的计算放在一起。

    下图说明了两种计算模式。在计算交叉特征的时候(例如红色方块这一列),相同的 user 特征会被频繁使用。图 (a) 为基于行的方式,每次处理交叉特征的时候都需要重新加载 user 特征;图 (b) 为基于列的方式,在处理为交叉特征的时候可以重复使用缓存的 user 特征。

    通过这种方式,我们可以使用 Single Instruction Multiple Data: SIMD 这样的技术来加速特征计算。

    在计算交叉特征(如 ad_fg & u_fg ,右图最右侧一列)时,基于列的计算可以缓存 u_fg

  4. 低精度GPU 计算:对于 COLD 模型,大部分计算是稠密矩阵的乘法,这就留下了优化空间。在英伟达的 Turning 架构中,T4 GPUFloat16Int8 矩阵乘法提供了极致性能,非常符合我们的caseFloat16 的理论峰值 FLOPS 可以比 Float328 倍。

    然而,Float16 丢失了一些精度。在实践中,我们发现对于某些场景,当我们对某些 feature group 使用 sum-pooling 时,稠密网络的输入可能是一个非常大的数字,超过了 Float16 的表示范围。

    • 一种解决方案是使用 normalization layer,如 BN 层。然而,BN 层本身包含的 moving-variance 参数,其幅度可能甚至更大。这意味着计算图需要混合精度,即全连接层使用 Float16BN 层使用 Float32

    • 另一种解决方案是使用无参数parameter-free 归一化层。例如,对数函数可以轻松地将大数值转换为合理的范围。但是,log() 函数无法处理负值,并且当输入接近零时可能会导致一个巨大的数值。因此,我们设计了一个称为线性对数算子linear-log operator 的分段平滑函数来处理这种不必要的行为,即:

      $ \text{linear_log}(x) = \begin{cases} -\log(-x) - 1 &, x\lt -1\\ x&,-1\le x\le 1\\ \log(x) + 1&,x\gt 1 \end{cases} $

    linear_log() 函数的图形如下图所示。它将 Float32 数值转换为一个合理的范围。因此如果我们在第一层放置一个 linear_log 算子,就可以保证网络的输入很小。此外,linear_log() 函数是 $ C^1 $ 连续的,因此不会使网络训练更加困难。在实践中,我们发现添加这一层之后,网络仍然可以达到与原始 COLD 模型相同的精度。

    使用 Float16 进行 inference 之后,我们发现 CUDA kernelrunning time 急剧下降,kernel 启动时间成为瓶颈。为了提高实际的 QPS,我们进一步使用 Multi-Process Service: MPS 来减少启动 kernel 的开销。结合 Float16MP,引擎的吞吐量是以前的两倍。

22.1.3 全在线基础设施

  1. 受益于不受限制的模型架构,COLD 可以在全在线基础设施fully online infrastructure 下实现:训练和 serving 都以 online 的方式执行,如下图所示。从行业角度来看,这是目前最好的系统实践。这种基础设施有两个方面的好处:

    • COLD 模型的 online learning 带来了其应对数据分布漂移 shift 的挑战的出色能力。

      根据我们的经验,当数据发生剧烈变化时(如双十一当天),COLD 模型相对于基于向量内积的 DNN 模型的性能提升更为显著,正如我们在实验部分所示。此外,COLD 模型的 online learning 对于新广告更加友好。

      这是 online learning 的优势:能实时学习最新的数据分布。

    • COLD 全在线的 pre-ranking 系统为我们提供了灵活的基础设置,从而支持高效的新模型开发和在线 A/B test

      注意,对于基于向量内积的 DNN 模型,用户侧向量和广告侧向量需要离线预计算并通过索引加载到 inference 引擎。因此,它涉及多个系统的开发,以进行基于向量内积的 DNN 模型的两个版本的 A/B test 。根据我们的经验,获得可靠的 A/B test 结果的典型时间成本是几天,而 COLD 则是几个小时。此外,全在线 serving 也有助于 COLD 避免基于向量内积的 DNN 模型所遭受的延迟切换。

      从下图结构可以看到,COLD 使用了大量的、人工构造的交叉特征 cross features 。因此 COLD 中,user 信息和 ad 信息在两个 level进行了融合:

      • 在输入特征 levelCOLD 显式地、人工地构造了交叉特征,从而融合了 user-ad 信息。
      • 在模型架构 levelCOLD 通过全连接层,从而融合了 user-ad 信息。

22.2 实验

  1. 我们进行仔细的比较,从而评估所提出的 pre-ranking 系统 COLD 的性能。作为一个工业系统,COLD 在模型性能和系统性能上都进行了比较。据我们所知,这项任务只有公共数据集或 pre-ranking 系统(而没有二者的结合)。以下实验在阿里巴巴在线展示广告系统中进行。

  2. baseline 方法:COLD 模型最强的 baseline 是基于 SOTA 向量内积的 DNN 模型,它是我们展示广告系统中在线 pre-ranking 模型的最新版本。

  3. 配置:

    • COLD 模型和基于向量内积的 DNN 模型都使用超过 900 多亿个样本进行训练,这些样本都是从真实系统的日志中收集的。注意:基于向量内积的 DNN 模型和 COLD 模型共享相同的用户特征和广告特征。基于向量内积的 DNN 模型不能引入任何 user-ad 交叉特征,而 COLD 模型使用 user-ad 交叉特征。

      为了公平比较,我们还评估了具有不同交叉特征groupCOLD 模型的性能。

    • 对于 COLD 模型,特征 embedding 向量被拼接在一起,然后被馈送到全连接网络。这个全连接网络的结构是 $ D_\text{in}\times 1024 \times 512 \times 256 \times 128 \times 64\times 2 $ ,其中 $ D_\text{in} $ 为所有被选中特征的 embedding 的拼接。

      对于基于向量内积的模型,全连接层的结构为 $ 200\times 200\times 10 $ 。

      对于基于向量内积的模型,全连接层表示单侧网络的全连接层。

    • 两种模型的输入特征 embedding 维度均设置为 16

    • 我们使用 Adam 优化器来更新模型参数。

  4. 评估指标:

    • 模型性能评估指标:GAUC 作为评估模型离线性能的指标。

      此外,我们引入了一个新的 top-k 召回率指标,从而度量 pre-ranking 模型和后续 ranking 模型之间的对齐程度alignment degreetop-k 召回率定义为:

      $ \text{recall} = \frac{|\{\text{top k ad 候选}\}\cap \{\text{top m ad 候选}\}|}{|\{\text{top m ad 候选}\}|} $

      其中:

      • top k ad 候选top m ad 候选 是从同一个候选集合(即 pre-ranking 模块的输入)生成的。
      • top k ad 候选 是根据 pre-ranking 模型排序的,top m ad 候选 是根据 ranking 模型排序的,并且 $ m\ll k $ 。
      • 排序指标为 eCPM = pCTR x 点击出价

      在我们的实验中,ranking 模型使用 DIEN,这是在线 ranking 系统的以前的版本。

    • 系统性能评估指标:为了评估系统性能,我们使用的指标包括 Queries Per Seconds: QPS(用于衡量模型的吞吐量)、return time: RT(用于衡量模型的延迟)。这些指标反映了模型在相同大小的pre-ranking 候选集合下的算力成本。粗略地说,较低 RT 下较大的 QPS 意味着给定模型的算力成本较低。

  5. 离线模型效果评估:下表给出了不同模型的离线性能评估结果。可以看到:COLD 保持了与我们之前版本的 ranking 模型 DIEN 相当的 GAUC,并且与基于向量内积的模型相比,在 GAUCRecall 上都取得了显著的提升。

  6. 在线 A/B test 效果评估:下表显示了 COLD 模型相对于基于向量内积的 DNN 模型的在线 A/B test 提升。 可以看到:

    • 在正常情况下,COLD 模型实现了 6.1%CTR 提升和 6.5%Revenue Per Mille: RPM 提升,这对我们的业务意义重大。
    • 此外,在双十一活动期间,COLD 模型实现了 9.1%CTR 提升和 10.8%RPM 提升。这证明了全在线基础设施的价值,在数据急剧变化时,它可以使得模型适应最新的数据分布。

  7. 系统性能的评估:我们评估了使用不同模型的 pre-ranking 系统的 QPSRT,如下表所示。基于向量内积的模型在具有 2Intel(R) Xeon(R) Platinum 8163 CPU@2.50GHz (96 cores)512GB RAMCPU 机器上运行。COLD 模型和 DIEN 在配备 NVIDIA T4 的一个 GPU 机器上运行。

    可以看到:

    • 基于向量内积的 DNN 模型实现了最佳系统性能,这符合预期。
    • DIEN 算力成本最高,COLD 达到算力和效果的平衡。

  8. 消融研究:为了进一步了解 COLD 的性能,我们在模型设计视角和工程优化技术视角进行了实验。对于后一种方法,由于很难将所有的优化技术从集成系统中解耦出来并进行比较,因此这里我们仅对 GPU 低精度计算这个最重要因素进行评估。

    • pre-ranking 系统的不同版本 COLD 模型的 trade-off 性能:在模型设计阶段,我们使用 SE block 来获取特征重要性权重,并选择不同的 feature group 作为模型的候选版本。然后我们进行离线实验以评估模型的 QPS,RT,GAUC 等性能,如下表所示。* 是我们用于产品中的 COLD 模型的平衡版本,它使用部分交叉特征。

      可以看到:

      • COLD 模型的算力成本因为特征不同而不同,这符合我们灵活的网络架构设计。
      • 交叉特征越多的 COLD 模型性能越好,这也相应增加了 online serving 的负担。

      通过这种方式,我们可以在模型性能和算力成本之间进行 trade-off。在我们的真实系统中,我们根据经验手动选择平衡的版本。

      COLD 需要大量的、人工构造的交叉特征,这会增加人工特征工程的负担。

    • 不同 GPU 精度的计算比较:实验是在配备 NVIDIA T4GPU 机器上运行。在运行实验时,我们从客户端逐渐提高 QPS,直到超过 1% 的服务器响应时间开始超过延迟限制。然后我们将当前 QPS 记录为可用 QPS。实验结果如下表所示。可以看到:

      • Float32 版本的可用 QPS 最低。
  • 单独使用 Float16 可以提高大约 21% 的可用 QPS

    • 结合 Float16CUDA MPS,我们可以将可用 QPSFloat32 提高一倍,并且可以在不超过延迟限制的情况下充分利用 GPU

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文