Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

用TensorFlow实现ML模型并调优:每秒可做3亿次预测

用 TensorFlow 实现机器学习模型,并使用各种优化技术降低延迟,模型的速度最快能够达到多少?

TensorFlow 是目前使用最广泛的机器学习框架之一,它加快了研究速度,并减少了新模型的生产时间。在一篇论文中,来自原生程序化 DSP 公司 Zemanta 的数据科学总监 Davorin Kopič和工程师 Jan Hartman 展示了将在线广告生态系统中的大规模机器学习模型转换为 TensorFlow 框架的过程,并将在 TensorFlow 框架中实现的机器学习模型扩展到每秒超过 3 亿次预测。因此,该研究的主要内容是在 TF 中实现模型并使用各种优化技术以低延迟有效地为其提供服务。



论文地址:https://arxiv.org/abs/2109.09541


该研究使用的案例是线上广告的点击预测。在 RTB (实时竞价)中,多个 DSP(竞标者)通过在网页的加载过程中实时竞标来竞争在线广告空间。广告空间是按广告印象出售的,这使得以市场价值出售虚拟广告空间成为可能。通过使用机器学习,RTB 还使广告商能够最大化其 KPI,例如点击率 (CTR)。估算广告的点击率是 RTB 的核心问题之一,拥有一个好的点击预测模型非常重要。

在 Golang 中实现的基于自定义逻辑回归和分解机 (FM) 的模型,其表达能力受限,并且需要手动实现所有学习程序,这些都会减慢实验速度并限制模型的预测性能。因此,研究者决定采用 TensorFlow 框架,并用表达能力更强的模型替换现有模型。


面临的挑战

基于广告竞标这一具体用例,该研究遇到了一些挑战,共分为实现、服务和优化三个方面。

一方面,为每台机器配备一个或多个顶级 GPU 的成本会高得令人望而却步;另一方面,只有一小群 GPU 的机器将迫使研究过渡到基于服务的架构。鉴于这两种选择都不是特别可取,而且该研究的模型与其他深度学习领域(例如计算机视觉自然语言处理)的 SOTA 模型相比相对较小,因此该研究不在生产中使用 GPU 进行推断。并且由于该研究的模型使用稀疏权重,其用例也不适合 GPU 工作负载。


实现

为了给 TF 模型实现有效的训练循环,该研究实现和测试了多种方法。高吞吐量在线训练和在 TF 中服务的案例研究很少,而且文档往往不够具体,这迫使研究者必须通读源代码和基准原型才能发现实现过程中的陷阱。

TF 提供了一个庞大的生态系统和大量具有 SOTA 算法实现的库。选择功能丰富的已有实现非常容易,但是研究者发现这些实现大多未经优化,因此他们决定自己实现算法。TF 具有不同抽象级别的 API,不过,一些 API 虽然易于使用,但通常是效率低下的最底层操作(例如 Estimator API)。研究者最终选择了 Keras3,因为它是一个围绕底层 TF 操作的瘦包装器(thin wrapper),并具备高水平的性能,且易于理解。由于 TF 是一个功能和资源都非常丰富的库,因此该研究还必须考虑要在其中实现多少机器学习 pipeline。研究者选择暂时搁置特征转换和交互,仅实现学习算法——尽管它们是最小的可替换部分,但却具备最大的改进潜力。

由于 Golang TF 包装器仅支持预测,因此必须在 Python 中实现训练循环。脚本通过将其标准输入作为子进程实现与 Golang 数据 pipeline 的连接。数据以高效的二进制格式发送而无需解析,与 CSV 格式相比,该方法的速度提高了 25%。然后在后台线程中读取数据,以防止模型在等待数据时空闲。基于此,该研究实现了在整个训练 pipeline 中保持高吞吐量。事实证明,高效的输入和输出也是低延迟预测的关键,该研究通过将所有输入特征连接到单个张量(tensor)中,显著减少了在序列化和复制输入数据上花费的时间。



服务

研究者发现,由于计算密集型神经网络的存在,在使用 Golang TF 装饰器的情况下,DeepFM 模型的 CPU 使用率要高得多。尽管带来了指标的显著提升,但将这种方法扩展到 100% 的流量会带来大量的硬件成本。由于当前全球面临芯片短缺的问题,这意味代价是困难和昂贵的。


显然,降低计算成本是很有必要的。然而缩小神经网络模型规模的同时,也会降低模型的预测性能。在深入研究了 TF 之后,研究者发现如果在计算批处理时增加示例的数量,计算效率会大大提升。这种低线性增长是由于 TF 代码被高度向量化了,TF 也会产生每次计算调用的开销,然后将其分批摊销。考虑到这一点,如果希望减少计算调用的数量,就需要将许多请求连接到一个计算中。

研究者构建了全部包含在一个运行的 bidder 实例的自动批处理系统,以避免网络调用。由于每个实例每秒钟接收数千个传入请求,因此可以保证连接来自众多请求的计算,创建更大的批次。研究者通过一些批处理线程实现了这一点,这些线程接收来自传入请求的数据,创建批处理并在批处理完成后初始化计算。计算过程中,每隔几毫秒即初始化一次以避免超时,因为批处理可能在这个时间窗口中没有填充。这种实现是高度优化的,将计算调用的数量减少到五分之一,同时将 TF 计算的 CPU 占用量减半。

虽然在批处理器线程没有获得 CPU 时间的极少数情况下,会发生请求超时,但只有不足 0.01% 的请求会出现这种情况。研究者观察到平均延迟略有增加(平均约 5 毫秒),流量高峰时可能会更多一些。因此他们实施了 SLA(服务等级协议)和适当的监控手段,以确保延迟的稳定性。鉴于没有大幅增加超时的百分比,这些方法仍是非常有效的,也是这一 TF 服务机制的核心。

本文作者之一 Davorin Kopič

优化

研究者在 TF 中实施的模型最初比定制的 FMs 慢得多,为了寻找加速空间,研究者大量使用内置的 TF 分析器来寻找执行时间最长的操作,并尽可能进行了改进。最常见的是各种冗余的 reshape 或转换运算。其中一个更有趣的发现是 Adam 优化器比 Adagrad 慢得多 (大约 50%),尽管二者运算数量上的差异很小。分析器显示,对稀疏权值进行梯度更新需要大量计算时间。这是因为模型的权重是稀疏的 (特征大部分是分类的,因此非常稀疏) ,而优化器没有考虑到这个事实。

由于用 Adagrad 替换 Adam 意味着深度模型性能的显著降低,研究者也寻找了其他解决方案:切换到 Lazy Adam 的优化器被证明是非常有效的,因为它可以非常有效地处理稀疏权重问题。结果显示,其整体加快了超过 40% 的训练速度,与 Adagrad 相接近。

由于使用了自适应优化器(比如 Adam),这也需要存储权重矩和方差,每个参数将存储三个值,将保存的模型大小增加了三倍。然而,这些值实际上并不用于预测,只用于训练。研究者利用这一点构建了优化过程,去掉了这些值的模型,减少了 66% 的数据量,并降低了内存使用量和成本。
理论TensorFlow优化器
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

逻辑回归技术

逻辑回归(英语:Logistic regression 或logit regression),即逻辑模型(英语:Logit model,也译作“评定模型”、“分类评定模型”)是离散选择法模型之一,属于多重变量分析范畴,是社会学、生物统计学、临床、数量心理学、计量经济学、市场营销等统计实证分析的常用方法。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

基准技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

批次技术

模型训练的一次迭代(即一次梯度更新)中使用的样本集。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

量化技术

深度学习中的量化是指,用低位宽数字的神经网络近似使用了浮点数的神经网络的过程。

推荐文章
暂无评论
暂无评论~