400-123-4657
行业资讯
您当前的位置: 首页 > 新闻动态 > 行业资讯

亚马逊广告:PyTorch等助力降71%推理成本且横向扩展

时间:2025-04-04

作者:Yashal Kanungo - 应用科学家Kamran Khan - Shubha Kumbadakone高级技术产品经理 - ML框架的高级专家

亚马逊广告使用Pytorch,Torchserve和Amazon Phepentia在开车时将推理成本降低71%。

亚马逊广告可帮助公司建立品牌,并通过在亚马逊商店内和亚马逊商店内显示的广告与购物者建立联系,包括网站,应用程序和在15个国家 /地区的电视节目中播放电视内容。各种规模的企业和品牌,包括注册卖家,供应商,书籍供应商,Kindle Direct Publishing(KDP)作者,应用程序开发人员和代理商,可以上传自己的广告想法,其中包括图像,视频,音频以及在亚马逊上出售的商品。

为了促进准确,安全和愉快的购物体验,这些广告必须遵守内容准则。例如,如果广告打开或关闭,则必须在适当的上下文中显示产品,并且图片和文本应适合普通受众。为了确保广告符合所需的政策和标准,我们需要开发可扩展的机制和工具。

作为解决方案,我们使用机器学习(ML)模型来显示可能需要修改的广告。在过去十年中,深层神经网络蓬勃发展,我们的数据科学团队已经开始探索更通用的深度学习方法(DL)方法,这些方法可以使用最少的手动干预处理文本,图像,音频或视频。为此,我们使用Pytorch来构建计算机视觉(CV)和自然语言处理(NLP)模型,这些模型会自动标记潜在的不合格广告。 Pytorch是直观,灵活且用户友好的,使我们无缝过渡到使用DL型号。在基于Amazon推理的亚马逊EC2 INF1实例上部署这些新模型,而不是基于GPU的实例,我们将推断潜伏期降低30%,推理成本降低了71%。

过渡到深度学习

我们的机器学习系统将经典模型与单词嵌入式配对,以评估广告文本。但是我们的需求在不断变化,随着提交不断增长,我们需要一种灵活的方法来扩展,因为我们的业务正在扩大。此外,我们的模型必须在毫秒内迅速宣传,以提供最佳的客户体验。

在过去的十年中,深度学习在许多领域都非常流行,包括自然语言,视觉和音频。由于深神经网络通过多个层传输数据集(从层次提取更高级别的特征),因此比经典ML模型可以做出更微妙的推论。例如,深度学习模型可以拒绝提出虚假主张的广告,而不是简单地检测被禁止的语言。

此外,深度学习技术是可以转移的 - 可以适应执行相关任务的任务的模型。例如,可以优化预训练的神经网络以检测图像中的对象,然后微调以识别广告中不允许显示的特定对象。

深度神经网络可以自动执行经典ML中最耗时的步骤:功能工程和数据标记与需要探索性数据分析和功能手动设计的传统监督学习方法不同,深层神经网络直接从数据中学习相关功能。 DL模型还可以分析非结构化数据,例如文本和图像,而无需ML所需的预处理。深度神经网络可以有效地扩展更多数据,并在涉及大数据集的应用中表现出色。

我们选择Pytorch开发我们的模型,因为它帮助我们最大程度地提高了系统的性能。借助Pytorch,我们可以在利用Python最直观的概念的同时为客户提供更好的服务。 Pytorch中的编程面向对象:它将处理功能与其修改的数据相结合。因此,我们的代码库是模块化的,我们可以在不同应用程序中重复使用代码段。此外,Pytorch的急切模式允许循环和控制结构,因此模型中的操作更为复杂。急切的模式可以很容易地原型化并迭代我们的模型,我们可以使用各种数据结构。这种灵活性有助于我们快速更新模型以满足不断变化的业务需求。

应用科学家Yashal Kanungo说:“在此之前,我们尝试了其他'Pythonic'框架,但是Pytorch显然是这里的赢家。” “这很容易使用Pytorch,因为这种结构感觉就像是用于Python编程的本地结构,并且数据科学家对此非常熟悉。”

培训管道

今天,我们完全在Pytorch中构建了文本模型。为了节省时间和金钱,我们经常通过微调预训练的NLP模型来跳过培训的早期培训进行语言分析。如果我们需要一个新的模型来评估图像或视频,则首先浏览Pytorch的Torchvision库,该库为图像和视频分类,对象检测,实例细分和姿势估计提供了预训练选项。对于专业任务,我们从头开始构建自定义模型。 Pytorch非常适合这一点,因为急切的模式和用户友好的前端使尝试不同的体系结构变得容易。

要了解如何在Pytorch中微调神经网络,请参见本教程。

在开始训练之前,我们优化了模型的超参数,定义网络体系结构(例如隐藏层的数量)和训练机制(例如学习率和批处理大小)的变量。选择适当的高参数值至关重要,因为它们将塑造模型的训练行为。在此步骤中,我们依靠Amazon Cloud Technology的ML平台SageMaker中的贝叶斯搜索功能。贝叶斯搜索将高参数调整视为回归问题:它提出了可能产生最佳结果并运行培训工作以测试这些值的超参数的组合。每次试验后,回归算法确定要测试的下一组超参数值,并且性能将逐渐改善。

我们使用SageMaker笔记本进行原型化和迭代模型。急切的模式使我们能够通过为每个培训批次构建一个新的计算图来快速原型。可以在迭代之间进行操作顺序,以适应不同的数据结构或与中间结果结合使用。这使我们可以在培训期间调整网络而无需从头开始。这些动态图对于基于可变序列长度的递归计算特别有价值,例如使用NLP分析的广告中的单词,句子和段落。

当我们完成模型体系结构时,我们将在Sagemaker上部署培训工作。 Pytorch通过同时运行大量培训工作来帮助我们更快地开发大型模型。 Pytorch的分布式数据并行性(DDP)模块在SageMaker中的多个互连机上复制了一个模型,并且所有过程都在数据集中的独特部分上同时向前运行。在反向传播期间,模块平均所有过程的梯度,因此每个本地模型都使用相同的参数值更新。

模型部署管道

当我们在生产中部署模型时,我们希望确保降低推理成本而不会损害预测准确性。 Pytorch的多个功能和Amazon Cloud Technology Services帮助我们解决了这一挑战。

动态图形的灵活性丰富了训练,但是在部署中,我们希望最大程度地提高性能和便携性。在Pytorch中开发NLP模型的优点之一是,它们可以通过Torchscript(专门用于ML应用程序的Python子集)将其从包装盒中取出静态操作序列。 Torchscript将Pytorch模型转换为更有效,更易于编译生产友好的中间表示(IR)图。我们通过模型运行样本输入,Torchscript记录了前向通行过程中执行的操作。生成的IR图可以在高性能环境中运行,包括C ++和其他无Python的多线程上下文,并且诸如操作员融合等优化可以加快运行时。

Neuron SDK和亚马逊推理驱动计算

我们将模型部署在亚马逊推荐的Amazon EC2 INF1实例上,Amazon Phebentia是亚马逊的第一个ML芯片,旨在加速深度学习推理工作负载。与基于亚马逊EC2 GPU的实例相比,推论降低了推理成本高达70%。我们使用Amazon Neuron SDK,这是一组与推理的软件工具一起编译和优化我们在EC2 INF1实例上部署的模型。

以下代码片段显示了如何使用Neuron编译拥抱面孔模型。就像Torch.jit.trace()一样,Neuron.trace()记录了模型的操作,以示例输入在正向通行证中构建静态IR图。

导入火炬变压器导入bertmodel,berttokenizerimport torch.neurontokenizer = berttokenizer.from_pretaining(“通往保存的vocab的路径”)型号= bertmodel.from_pretaining(“通往保存的模型”的路径,return_dict = false_dict = false) TORCH.NEURON.TRACE(模型,example_inputs =(inputs ['input_ids'],inputs ['activation_mask']),词= 1)输出= neuron_model(*(inputs ['input_ids'],inputs'],inputs inputs ['ovity_mask'])

自动转换和重新校准

在底部,神经元通过自动将其转换为较小的数据类型来优化模型的性能。默认情况下,大多数应用程序代表32位单位浮点(FP32)数字格式中的神经网络值。自动将模型转换为16位格式(HALF-PRECISION浮点(FP16)或大脑浮点(BF16))降低了模型的内存足迹和执行时间。在我们的情况下,我们决定使用FP16来优化性能,同时保持高精度。

在某些情况下,自动转换为较小的数据类型会触发模型预测的细微差异。为了确保模型的准确性不受影响,神经元比较了FP16和FP32模型的性能指标和预测。当自动转换降低模型的准确性时,我们可以告诉神经元编译器仅将权重和某些数据输入转换为FP16,从而使其余的中间体在FP32中产生。此外,我们经常进行训练数据的几次迭代,以重新校准我们的自动铸造模型。这个过程远低于原始培训。

部署

为了分析多媒体广告,我们运行了一组DL模型。上传到亚马逊的所有广告都通过专门的模型运行,这些模型评估了它们包括的每种类型的内容:图像,视频和音频,标题,文本,背景,甚至语法结构,语法以及可能不适当的语言。我们从这些模型中收到的信号表明广告是否符合我们的标准。

部署和监视多个模型非常复杂,因此我们依靠SageMaker的默认Pytorch模型Service库Torchserve。由Facebook的Pytorch团队和Amazon Cloud Technology开发的Torchserve旨在简化从原型制作到生产的过渡,帮助我们在不编写自定义代码的情况下大规模地部署训练有素的Pytorch模型。它为推理,管理,测量和解释提供了一组安全的REST API。借助多模型服务,模型版本控制,集成支持和自动批处理处理,Torchserve是支持我们庞大的工作量的理想选择。您可以在此博客文章中阅读有关在SageMaker上部署Pytorch模型的更多信息,并集成本机Torchserve。

在某些用例中,我们使用Pytorch面向对象的编程范式将多个DL模型包装到父对象(Pytorch nn.module)中,并将其整体提供。在其他情况下,我们使用Torchserve在Amazon Inf1实例上运行的单独的SageMaker端点上使用单独的型号。

自定义处理程序

我们特别感谢Torchserve的许可将模型初始化,预处理,推理和后处理代码嵌入服务器上的单个Python脚本handler.py中。此脚本(处理程序)在AD中预处理数据,通过我们的模型运行该数据,并将结果推断为下游系统。 Torchserve提供了多个默认处理程序,用于加载权重和架构,并准备在特定设备上运行的模型。我们可以将所有必需的附件(例如词汇表或标记地图)与一个存档文件中的所有必需附件捆绑在一起。

当我们需要部署具有复杂初始化过程的模型或源自第三方库的模型时,我们会在Torchserve中设计自定义处理程序。这使我们可以使用任何必需的过程从任何库中加载任何模型。以下代码片段显示了一个简单的处理程序,可以在任何萨格人托管端点实例上为拥抱面BERT模型提供服务。

导入Torchimport火炬。 TS的神经元。 TORCH_HANDLER。 base_handler导入baseHandlerimport Transformers从变形金刚导入AutoModelforSequenCecrification,autotokenizerclass mymodelhandler(baseHandler):def初始化(self,context):self。清单= CTX。 SubtestProperties = CTX。 system_propertiesmodel_dir =属性。 get(“ model_dir”)serialized_file = self。清单[“ model”] [“ serializedFile”] model_pt_path = os。小路。加入(model_dir,serialized_file)自我。 Tokenizer =自动源。 from_pretaining(model_dir,do_lower_case = true)self。

型号= AutomodEforSequerSececeCecrification。 from_pretaining(model_dir)def preprocess(self,data):input_text = data。 get(“ data”)如果input_text是无:input_text = data。获取(“身体”)输入= self。令牌。 encode_plus(input_text,max_length = int(max_length),pad_to_to_to_max_length = true,add_special_tokens = true,return_tensors ='pt')return inputsdef inputsdef percenter(self,self,inputs):预测= self。型号(**输入)返回预测DEFEF后进程(Self,Output):返回输出

批处理处理

硬件加速器针对并行性进行了优化,批处理(一步一步为模型提供多个输入)有助于使所有可用容量饱和,通常会导致更高的吞吐量。但是,过度的批量大小会增加潜伏期,而吞吐量增加很小。尝试不同的批次尺寸有助于我们确定模型和硬件加速器的最佳位置。我们进行实验,以确定模型尺寸,有效载荷大小和请求的流量模式的最佳批量尺寸。

神经元编译器现在支持可变批量大小。以前,跟踪模型硬编码预定义的批量大小,因此我们必须填充数据,这将浪费计算,减少吞吐量和加剧潜伏期。优化推论以最大程度地吞噬小批量,从而通过减少系统负载来减少延迟。

并行性

多核模型并行性也可以改善吞吐量和延迟,这对于我们的繁重工作量至关重要。每个推论芯片都包含四个可以同时运行单独模型或形成管道来传输单个模型的神经核。在我们的用例中,数据并行配置以最低的成本提供了最高的吞吐量,因为它扩展了并发处理请求。

数据并行:

模型并行性:

监视器

监测生产过程中推理的准确性至关重要。最初做出良好预测的模型最终将在部署中降低,因为它们会暴露于更多类型的数据。该现象称为模型漂移,通常在输入数据分布或预测目标变化时发生。

我们使用SageMaker模型监视器来跟踪培训数据和生产数据之间的均等。当生产预测开始偏离培训和验证结果时,模型监视器通知我们。多亏了此预警,我们可以在受到广告客户受到影响之前在必要时恢复准确性(如有必要)。为了实时跟踪性能,模型监视器还向我们发送了有关预测质量的指标,例如准确性,F分数和预测类的分布。

我们使用SageMaker模型监视器来跟踪培训和生产数据之间的均等。当生产预测开始偏离培训和验证结果时,模型监视器会通知我们。由于这种预警方法,我们可以在广告客户受到影响之前恢复准确性 - 如有必要,该模型可以重新训练。为了实时跟踪性能,模型监视器还向我们发送了有关预测质量的指标,例如准确性,F-评分和预测类别的分布。

为了确定我们的应用程序是否需要扩展,Torchserve会定期记录CPU,内存和磁盘的资源利用率指标;它还记录收到的请求和服务的数量。对于自定义指标,Torchserve提供了指标API。

有益的结果

我们的深度学习模型是在Pytorch中开发和部署的,并在降低成本的同时加快了广告分析。从我们在DL进行的首次探索开始,Pytorch的编程感觉很自然。它的用户友好功能有助于从我们的早期实验到多模式集成的部署。 Pytorch允许我们快速原型和建立模型,这对于广告服务的开发和扩展至关重要。为了获得附加的好处,Pytorch与Pebleentia和我们的Amazon Cloud Technology Machine Learning Stack无缝地工作。我们期待使用Pytorch构建更多用例,以便我们可以继续向客户提供准确的实时结果。

地址:广东省广州市天河区88号   电话:400-123-4657   传真:+86-123-4567
版权所有:Copyright © 2002-2025 华体会hth 版权所有 非商用版本      ICP备案编号:粤IP**********
hth·华体会体育(中国)官方网站-首页