【ASPLOS2024】RECom:通过编译器技术加速推荐模型推理,论文中选并获得荣誉奖项!

news2024/11/28 12:00:25

2024年5月,关于推荐模型自动编译优化的论文《RECom: A Compiler Approach to Accelerate Recommendation Model Inference with Massive Embedding Columns》在系统领域顶会ASPLOS 2024上中选并进行了展示,并被授予了Distinguished Artifact Award 荣誉,以表彰RECom的易用性与结果的可复现性。

RECom是一个旨在加速GPU上深度推荐模型推理的机器学习编译器,解决了已有机器学习编译器无法有效优化推荐模型中重要的嵌入层计算的问题。RECom提出了一种新颖的面向子图间并行的融合方法,以在单个GPU内核中生成处理大量嵌入列的高效代码,大幅减少了内核启动的开销并显著提升了GPU的利用率。通过一个形状计算简化模块来解决动态形状下形状计算带来挑战,并通过一个嵌入列子图优化模块来消除冗余计算。在阿里巴巴的四个真实的内部生产推荐模型和两个生成模型上评估了RECom,实验表明,RECom在端到端推理延迟和吞吐量方面分别优于TensorFlow基线6.61倍和1.91倍。

背景

基于深度学习的推荐模型在各大企业的业务中变得越来越重要。通过为用户推荐合适的商品,能够帮助提升客户体验,增加销售额,以及提高客户保留率。典型的推荐模型包括两部分,即嵌入层和深度神经网络层(DNN)。 在生产环境中,嵌入层通常由对应不同特征字段的大量嵌入列(即通过查表将输入特征转换为嵌入向量的子图,如下图中虚线方框所示)组成,它能将输入的特征(比如用户ID,商品ID等)映射到低维的连续向量。

为了获得更高的模型精度,开发人员通常会生成数千个统计特征,并使用不同的嵌入列来处理它们。 然而,处理如此大量的嵌入列是昂贵的。 例如,我们在阿里巴巴的模型上进行的实验表明,嵌入列可以占据GPU上99%以上的端到端推理延迟。 因此,业务中迫切需要对推荐模型中的海量嵌入列进行优化。

挑战

虽然目前已有一些加速嵌入层计算的手写算子库[1],但它们很难在真实业务中被广泛应用,因为它们不可能在库中遍历嵌入层中所有可能的算子组合。此外,出于隐私考虑,实际业务中经常要求根据模型的计算图IR(比如TensorFlow GraphDef)而非源代码来进行优化。然而,一个公司的业务中通常会包含大量具有不同嵌入列结构的模型,并且一个模型可以包含上百万行的IR。因此,基于这些IR再手工地使用这些算子库来重新搭建所有的业务模型是不现实的。

另一方面,机器学习编译器,如XLA[2]等被广泛地应用于自动加速机器学习模型的计算。然而,目前的机器学习编译器主要关注于DNN的计算,而无法为嵌入层中包含的大量嵌入列提供有效的优化。它们主要存在以下三个问题:

首先,在 GPU 上为数千个嵌入列中的大量算子生成有效的代码是一项挑战。现有编译器的算子融合策略既无法有效消除模型中大量的非计算开销(包括内核启动与算子调度),也无法充分利用模型中子图间的并行性。我们在一个特定模型的实验上发现,XLA 可以为该模型生成超过10,000个GPU内核,这会引入大量的非计算开销,进而导致GPU的活跃时间仅占33%。并且,线上推理时输入的batch size通常不会太大,导致大多数生成的GPU内核的Waves per SM都非常小(小于 0.06),意味着大部分的GPU SM在执行中都没有被利用。

其次,推荐模型通常具有动态形状(dynamic shapes)。传统的机器学习编译器通常依赖张量的形状来进行各种优化,而推荐模型的计算图中的张量形状一般无法在编译期获取。一方面,动态形状造成的张量间形状关系信息缺失阻碍一些编译优化的pass。另一方面,动态形状场景下,部分算子(如SparseReshape)需要形状的输入,继而引入了大量形状计算。形状计算与张量计算的耦合使得计算图变得复杂,阻碍了后续的图优化。

下图(a)展示了一个级联SparseReshape的子图,其中蓝色的算子表示形状计算。由于SR1输出的sparse tensor的消费者只有SR2,因此第一次reshape是冗余的。理想情况下,编译器检测到这样的情况后可以直接把SR1的输入张量(即张量1)连接到SR2,越过冗余的SR1,如(b)中所示。然而,由于形状计算与张量计算的耦合,导致实际转化后的图会如(c)中所示,SR1并不能被正确的优化掉。

第三,现有的机器学习编译器忽视了推荐模型中存在的大量冗余计算。通过对业务模型的分析,我们观察到现有模型普遍存在大量的冗余计算。例如,使用TensorFlow框架进行嵌入表查找时会引入一些边界检查的计算,而这些检查在整个嵌入列子图的上下文里可能是冗余的,因为在经过哈希/分桶等操作后,用于嵌入表查找的索引已经满足了要求。在极端情况下,一个嵌入列中80%的GPU计算时间可能都是冗余的。

破局

我们提出了第一个端到端的推荐模型优化编译器RECom来解决以上的问题。

针对大量嵌入列的GPU代码生成,RECom 提出了一种子图间并行性导向的算子融合方法,将嵌入层中数千个嵌入列包含的大量算子全部融合(fuse)到一个GPU kernel中。一方面,这种方法使得RECom 能够消除频繁的内核启动与框架调度,显著减少嵌入层执行时的非计算开销。另一方面,为了生成具有高并行性的代码,RECom 将独立的嵌入列映射到不同组的GPU 线程中。每个线程组中的线程协作处理一个嵌入列,并利用GPU 的层次存储来进行中间数据缓冲和线程间通信。通过这种方式,RECom 可以有效地利用GPU 来挖掘推荐模型嵌入层中算子内部和嵌入列间的并行性。

为了解决动态形状与形状计算带来的问题,RECom提出了一种基于符号表达式的方法。类似于BladeDISC[3],RECom 通过下图中的四种pattern构建了嵌入列的全局符号形状表达式,并利用这些表达式来确定不同张量的形状间关系。

得到形状的符号表达式后,RECom进一步将所有形状计算子图用统一的算子进行重构。重构后的ShapeConstruct算子仅依赖于生成所需符号的算子,而非依赖于原计算子图的输入。这样,RECom得以解耦张量计算与形状计算来简化计算图。回到之前冗余SparseReshap的例子,再经过形状计算重构后,SR2输入形状对SR1的依赖被消除,因此在经过原来的编译优化pass后,我们能得到下图的结果,成功去除了冗余的SR1。

对于嵌入层中存在的大量冗余计算,我们在RECom中开发了一个嵌入列子图优化模块,针对性地为常见的冗余计算设计了优化。具体细节可以参考我们的论文。

RECom的整个编译优化流程如下图所示。

与此同时,阿里云PAI团队与悉尼大学合作的论文《MonoNN: Enabling a New Monolithic Optimization Space for Neural Network Inference Tasks on Modern GPU-Centric Architectures》在OSDI2024中选,论文创新性地提出了MonoNN,这是第一个能够为单个GPU上的常见静态神经网络(NN)推理任务提供新的整体设计和优化空间的机器学习优化编译器。MonoNN可以将整个神经网络容纳到单个GPU核心中,大大减少了非计算开销,并从新形成的整体优化空间提供进一步细粒度的优化机会。最重要的是,MonoNN确定了各种NN运算符之间的资源不兼容性问题,这是创建这样一个整体优化空间的关键设计瓶颈。MonoNN通过系统地探索和利用跨不同类型的NN计算的并行补偿策略和资源权衡,并提出了一种新的独立于调度的群体调谐技术来显著缩小极其庞大的调谐空间。评估表明,MonoNN的平均加速比比最先进的框架和编译器提高了2.01倍。具体而言,就端到端推理性能而言,MonoNN在TVM、TensorRT、XLA和AStitch方面的表现分别高达7.3倍、5.9倍、1.7倍和2.9倍。目前,MonoNN已开源,如需获取MonoNN源代码请前往GitHub - AlibabaResearch/mononn;

论文地址:RECom: A Compiler Approach to Accelerating Recommendation Model Inference with Massive Embedding Columns | Proceedings of the 28th ACM International Conference on Architectural Support for Programming Languages and Operating Systems, Volume 4

论文信息

论文标题:《RECom: A Compiler Approach to Accelerating Recommendation Model Inference with Massive Embedding Columns》

论文地址:RECom: A Compiler Approach to Accelerating Recommendation Model Inference with Massive Embedding Columns | Proceedings of the 28th ACM International Conference on Architectural Support for Programming Languages and Operating Systems, Volume 4

参考文献

[1] NVIDIA. NVIDIA-Merlin/HugeCTR. https://github.com/NVIDIA-Merlin/HugeCTR, 2023.

[2] Google. XLA: Optimizing Compiler for Machine Learning. https://www.tensorflow.org/xla, 2023.

[3] Zhen Zheng, Zaifeng Pan, Dalin Wang, Kai Zhu, Wenyi Zhao, Tianyou Guo, Xiafei Qiu, Minmin Sun, Junjie Bai, Feng Zhang, Xiaoyong Du, Jidong Zhai, and Wei Lin. BladeDISC: Optimizing Dynamic Shape Machine Learning Workloads via Compiler Approach. Proc. ACM Manag. Data, 1(3), nov 2023.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot的招聘系统的设计与实现

TOC springboot614基于springboot的招聘系统的设计与实现--论文 研究背景 近年来,由于计算机技术和互联网技术的快速发展,使得所有企事业单位内部都是数字化、信息化、无纸化的发展趋势,随着趋势的发展,各种决策系统、辅助系统…

springboot安全在线学习平台---附源码131019

摘 要 这是采用springboot技术,SQL Server数据库实现的一个基于网络的在线学习系统。系统具有用户登录和注册、普通用户、课程分类、课程、购买表、课程上传等功能。在线学习是通过提供电子课件,让学生可以进行在线学习,并支持电子课件下载的…

windows主机查询url请求来自哪里发起的

最近使用fiddler抓包,看到一直有http://conna.gj.qq.com:47873 的请求, 对此进行溯源,确定是不是被攻击了。 在dos里查询端口进程:netstat -ano | findstr :47873 查到来自8020的进程id 查看此进程应用,发现竟然是…

postgresql 集群文档

https://www.cnblogs.com/Alicebat/p/14148933.html [命令] Pacemaker 命令 pcs cluster (管理节点) – Eternal Center PostgreSQL实战之物理复制和逻辑复制(五)_postgresql 流复制和物理复制-CSDN博客 https://jingyan.baidu…

UE5.4 - 下载和安装

一. 简介 虚幻引擎(Unreal Engine)是由 Epic Games 公司推出的一款功能强大的游戏开发引擎。它于 1998 年推出第一代,其口号是 “全球最开放、最先进的实时 3D 创作工具”。 虚幻引擎被广泛应用于游戏产业,创作出了众多知名的 3…

企业级WEB应用服务器TOMCAT从讲解到实战一篇解决

一 .WEB技术 1.1 HTTP协议和B/S 结构 操作系统有进程子系统,使用多进程就可以充分利用硬件资源。进程中可以多个线程,每一个线程可以 被CPU调度执行,这样就可以让程序并行的执行。这样一台主机就可以作为一个服务器为多个客户端提 供计算服…

教程:postman的平替hoppscotch,又叫postwoman,hoppscotch的docker-compose安装过程

目录 1. 背景2. 前期准备2.1 准备docker-compose文件,两个版本,一个3合1,一个分开2.1.1 3合1版本(推荐)2.1.2 独立版本 2.2 准备安装nginx-proxy-manager(可选)2.2 准备.env文件2.2.1 默认ip的.…

爬虫案例5——爬取东方财富网的港股数据

简介:个人学习分享,如有错误,欢迎批评指正 任务:从东方财富网中爬取港股的代码,名称,最近价格,涨跌幅,今开,最高等数据 目标网页地址:https://data.eastmone…

科技大厂对AI的垄断

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

探索HTML中的“iframe”标签——WEB开发系列12

现代网页开发中&#xff0c;​​<iframe>​​ 标签是一个非常重要的工具。允许我们在一个网页中嵌入另一个网页&#xff0c;对于展示外部内容、应用嵌套或实现复杂的布局设计都非常有用。来一起探讨如何使用 ​​iframe​​ 标签&#xff0c;包括设置高度和宽度、移除边框…

记录 升级到Gradle 8.4.2 遇到的坑

序言 最近将Gradle从4.0.1 升级到 8.4.2 遇到了很多坑&#xff0c;记录下来帮助有缘人 升级gradle 修改根目录的build.gradle dependencies {classpath com.android.tools.build:gradle:8.4.2classpath org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0}修改gradle-wrapper.…

【html+css 绚丽Loading】000011 三元轮回珠

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

【TS】函数重载的作用

前言 当调用一个函数时&#xff0c;通常会提示有多种调用方式&#xff0c;各种调用方式的参数类型、参数数量、返回值等均可能不同。本文通过自己封装的message作为案例模拟一下。 实现 自己封装的message组件&#xff0c;有以下7种调用方式 message({mode: "mode"…

QT-计算器

QT-计算器 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui…

分布式事务:基本概念

文章目录 一、基础概念1、什么是事务2、本地事务3 、分布式事务4、分布式事务产生的场景 二、分布式事务基础理论1、CAP理论&#xff08;1&#xff09;理解CAP&#xff08;2&#xff09;CAP组合方式&#xff08;3&#xff09;总结 2、BASE理论 三、分布式事务解决方案之2PC&…

【Java日志系列】Logback日志框架

目录 前言 一、Logback简介 二、Logback组件 三、快速入门 四、配置文件的使用 1. 配置文件中的标签 1.1 logger标签 1.2 root标签 1.3 appender标签 1.4 filter标签 1.5 encoder标签 1.6 property标签 2. 常见的Appender 2.1 ConsoleAppender 2.2 FileAppender…

瓜子二手车源码开发

瓜子二手车作为国内知名的二手车交易平台&#xff0c;其开发需求与功能架构主要围绕提升用户体验、保障交易安全、优化交易流程以及提供全面服务等方面展开。以下是对瓜子二手车开发需求与功能架构的详细分析 一、开发需求 用户需求&#xff1a; 便捷性&#xff1a;用户希望能…

ReTagList标签列表(API)

组件实现基于 Vue3 + Element Plus + Typescript,同时引用 vueUse + lodash-es + tailwindCss (不影响功能,可忽略) 基于ElTag实现的Tag列表,支持Tag列表多选,动态Tag列表 ReTagList标签列表 基础 简单展示Tag列表,可通过size指定尺寸 查看 /demo/tag-list/basic.md …

叉车门口拐角盲区防撞系统,精准微波距离测距,助力企业安全生产

叉车流动性强、作业场所不固定&#xff0c;是特种设备管理的薄弱环节。如何管住叉车、管好叉车&#xff0c;保障作业人员安全一直都是重点话题&#xff0c;引入智慧叉车&#xff0c;使用智能化监管&#xff0c;很多城市相继开展智慧叉车试点工作&#xff0c;给叉车装上“智慧大…

机械学习—零基础学习日志(如何理解概率论4)

当已知一个概率&#xff0c;求解另外一个函数的概率。以下是离散型的概率计算方法。 这里是连续型的&#xff0c;已知概念密度&#xff0c;计算对应的另外一个函数的概率。 这里需要求解对应的原始函数。 这里我们做一道练习题。 《概率论与数理统计期末不挂科|考研零基础入门…