行业洞察

Aarki 的竞价大脑进化,第一部分:深度学习助力移动增长

2025 年 8 月 22 日

作者简介

Ben Weber 是 Aarki 的机器学习副总裁,负责领导构建更智能的模型,这些模型每秒可处理数百万次实时竞价决策。他曾在 McAfee、Zynga、Twitch 和 EA 等公司担任高级职务。从构建竞价系统到重写预测流程,他的经验涵盖了实践操作、生产环境应用以及在现实世界中久经考验的案例。.

机器学习是Aarki需求方平台(DSP)的核心,我们在处理的每个竞价请求中都使用深度学习模型。为广告技术构建、部署和优化深度学习模型是一个持续的过程,而这项能力使我们能够不断改进平台,并为广告主提供更佳的广告效果。.

本文我们将讨论:

  • 我们之所以从经典定价模型转向深度学习定价模型,是出于以下原因:
  • 我们第一代深度学习模型的概述
  • 我们正在构建的下一代模型
  • 我们的基础设施以及我们如何利用 GPU 进行扩展

为什么我们不使用云平台进行机器学习

我们内部处理超过500万个QPS

我们的 DSP 部署在全球四个不同的数据中心,与 Unity、Google Adx 和 Fyber 等程序化广告交易平台位于同一交易地点。.

自有硬件可节省每次请求的成本

我们已投资购置了用于处理来自交易所的竞价请求、处理来自移动测量合作伙伴 (MMP) 的数据以及支持我们 Encore 平台的硬件。与使用 AWS 等公共云平台相比,这种架构可以降低我们处理请求的成本。.

但这也有其利弊。

我们目前无法按需启动新的虚拟机,也无法使用 GCP 的 Vertex AI 等平台来部署深度学习模型。这意味着我们需要更加有意识地构建基础设施。.

大爆炸:构建我们自己的机器学习堆栈

一切都始于私有数据中心中运行的所有管道

我们在 DSP 中训练模型和提供深度学习服务所采取的方法是,在我们的私有数据中心内构建机器学习管道。.

我们依赖于一个完全开源的生态系统

我们使用 Spark、Hadoop、Aerospike、ClickHouse、Redash、Prefect 和 Streamlit。PySpark 是我们用于训练 Python 模型的主要工具,它使我们的机器学习团队能够将 Python 作为一种通用语言;而 Rust 则凭借其并发性、安全性和高性能,为我们的 DSP 提供支持。.

传统的机器学习模型并非为大规模应用而设计。

逻辑回归:速度快但需要手动工程

许多需求方平台最初都采用被称为浅层或经典机器学习模型的方法,例如逻辑回归和决策树。逻辑回归非常适合作为入门模型,因为其模型评估速度快,并且存在用于训练具有大量特征的模型的分布式方法。.

例如,如果您使用 Spark 生态系统,MLlib 就是一个不错的选择。集成学习方法,例如 XGBoost 和 LightGBM,对于支持大规模数据集分布式训练的数字信号处理器 (DSP) 来说也很常见。.

逻辑回归无法处理特征交互作用

在使用逻辑回归预测结果(例如用户是否会点击广告)时,需要对输入特征之间的交互作用进行建模,才能获得性能良好的模型。例如,您可能需要对所推广的移动应用和负责呈现广告的发布商应用之间的交互作用进行建模。.

由于逻辑回归不支持直接对这些类型的交互进行建模,因此通常的做法是使用特征工程方法,手动创建输入特征的组合,并将此扩展特征集传递给逻辑回归模型。.

这种方法一开始可能效果不错,但是随着你向机器学习模型添加越来越多的特征,随着特征交互的增加,参数数量会开始呈爆炸式增长。.

功能爆炸式增长带来基础设施挑战

我曾参与构建拥有超过 1 亿个特征的点击预测模型,其中发布商应用与其他所有特征相结合,以尽可能提升模型性能。参数数量如此庞大,以至于 Spark 中的 MLlib 实现出现了模型训练问题,我们不得不探索其他更经济高效的模型训练方法。.

逻辑回归模型的主要问题是,你必须手动定义特征之间的交互作用,它限制了你可以包含的特征交叉数量,并且会导致参数非常大的模型,训练成本可能很高。.

梯度提升模型的可扩展性有所提高,但还不够理想。

在 Aarki,我们最初使用梯度提升算法,从 LightGBM 开始,构建预测用户转化率的定价模型。LightGBM 的一个关键优势在于,它能够学习模型内部特征之间的交互作用,而逻辑回归则不支持这一点。.

当模型只有几十个特征时,LightGBM 的表现还算不错。但随着特征数量增加到数百个,我们遇到了一些问题。与大多数经典机器学习方法一样,LightGBM 难以处理高基数的分类特征,例如发布商应用这一特征,它可能包含数百万个不同的值。.

LightGBM 确实有一些处理类别特征的不同方法,这些方法在某种程度上类似于深度学习模型中的嵌入,但我们无法让这些方法有效地训练和满足我们的用例。.

超越经典机器学习,迈向深度学习

我们探索的两种构建 DSP 预测模型的经典方法都存在一个核心问题:它们无法很好地处理大量的类别特征,而类别特征是我们数据集的关键组成部分。.

我们解决此问题的方法是开始在模型中使用嵌入,它提供了一种将分类数据表示为稠密向量的技术,从而可以降低维度并提高模型训练和推理的效率。.

第一代深度学习:DeepFM

我们采用了DeepFM模型,该模型结合了两个阶段:第一阶段(深度阶段)学习所有输入特征的嵌入向量;第二阶段(因子分解机阶段)对特征交互进行建模。这种方法使我们能够摆脱手动特征工程,并使模型能够更好地泛化到未见过的特征交互。.

Rust兼容性是必须的

由于我们的 DSP 是用 Rust 编写的,因此我们需要一个支持进程内推理的解决方案。我们使用 Fwumious Wabbit 库,完全用 Rust 来训练和部署 DeepFM 模型。这使我们能够避免远程调用带来的开销,并直接在竞价引擎内部提供预测结果。.

相对于经典机器学习的改进

DeepFM 使我们能够扩展到数百个输入特征,并在保持高效的同时做出更准确的预测。嵌入帮助我们将应用 ID 和用户信号等高基数特征压缩成可以自动学习和更新的密集向量,从而提高了模型的准确性和训练效率。.

但DeepFM也有其局限性。

因子分解机阶段需要将特征分组到不同的命名空间中,这意味着需要手动定义不同特征组之间的交互方式。我们面临的限制之一是 Fwumious Wabbit 训练库不支持 GPU 硬件加速,这限制了我们能够使用的数据量和迭代速度。.

虽然 DeepFM 是一个意义重大的进步,但我们知道我们需要进一步发展,以支持更大的数据集、更深的模型和更快的重新训练。.

引领下一代深度学习

我们对下一代的期望

为了持续提升大规模性能,我们需要一类新型模型,以满足更复杂用例和更大数据集的需求。我们的第一代深度学习模型证明了基于嵌入架构的价值,但它们不足以释放我们所预见的全部机遇。我们对下一代模型的目标很明确:

  • 使用更大的数据集进行训练
  • 更频繁地进行再培训
  • 处理新的预测任务(排名、相关性)
  • 改进我们的定价模型

迁移到 TensorFlow 和 PyTorch

我们已在私有数据中心投资了 GPU,并全面采用 TensorFlow 和 PyTorch 来训练现代深度神经网络。.

市场定价模型基于数十亿行数据进行训练

我们最初的深度神经网络模型专注于预测第一价格拍卖的最优出价。我们使用 Spark 进行大规模数据准备,并在 GPU 机器上使用 TF Records 高效地训练 TensorFlow 模型,每天处理超过十亿条记录。.

我们如何为生产中的模特提供服务

我们将模型转换为 ONNX 格式,并使用 Rust 语言的 ort 库进行进程内推理。训练在 GPU 加速的机器上进行;而服务处理则仍然基于我们 DSP 中的 CPU。.

我们正在探索的架构

对于核心转化预测模型,我们正在测试 DCNv2 和 TabTransformer。我们也在探索双塔架构,以便更好地将广告与广告资源匹配。.

GPU投入解锁更高水平的机型性能

凭借我们现有的基础设施和 GPU,我们正在扩展深度学习,为广告商提供更智能的竞价、更快的迭代和更高的投资回报率。.

为什么这段旅程意义非凡

从逻辑回归到 DeepFM 再到现代深度神经网络 (DNN),我们机器学习策略的每一次演进都遵循一个核心原则:大规模地为广告主带来更佳的广告效果。本文介绍了我们如何识别并解决传统机器学习日益增长的局限性,以及我们如何将深度学习融入到 DSP 的底层架构中。.

但模型架构只是其中的一部分。在本文的第二部分,我们将深入探讨支撑这一切的基础设施:我们为什么投资GPU,我们如何验证这一决策,以及它为大规模模型训练带来了哪些优势。.

如果你喜欢这篇博客,请给Ben发个信息。 bweber@aarki.com. 他很乐意收到你的来信!

zh_CNZH