智源打造基于Triton的大模型算子库,助力AI芯片软硬件生态建设

2024年大模型进入了新的发展阶段,AI全领域开启了更为迅猛的量变积累。一方面,模型突破了模态的隔离,文本、语音、视觉等各种形式之间产生的丰富的结合,大大增加了模态的多样性;同时,模型参数量从百亿、千亿级膨胀到万亿级,训练数据量从TB级达到PB级,上下文令牌数量也从几千增长到百万级,计算规模空前庞大;此外,算法结构的创新也带来了MoE、模型量化、定制算子等更加复杂的计算需求。

而在硬件设备的层面,由英伟达主导的CUDA生态以SIMT编程模型和CUDA编程语言为核心,从高性能算子库、开发工具链和GPU驱动等各个层次全面协同,建立了一套完整的体系,并长期占据着高性能计算的领先地位。虽然有生态竞争者——诸如OpenCL和ROCm等——在试图挑战和替代CUDA,但是无论在推广程度、使用体验还是计算性能方面都存在一定差距。新兴的各种AI芯片硬件架构不一、指令集不一、各自有自己的AI编译器,算子库也各自实现,整体呈现十分割裂且难以强大的生态。哪怕有部分AI芯片厂商不断模仿、跟进和对齐CUDA,然而受限于芯片架构的差异和底层的封闭属性,厂商的生态适配仍旧面临开发难度大、任务重以及各自为战的难点。

算力需求增长而资源供应紧张的局面下,多元芯片的开源共建无疑是撼动CUDA地位、打造全新格局的机遇。而作为软硬件衔接的关键环节,编译技术这一层次则成为构建统一生态的入口。

为降低大模型新算法的开发门槛、加速芯片架构的创新,智源研究院在今年的智源大会上发布了使用Triton语言实现的算子库FlagGems,以大模型的计算需求为导向,面向多元芯片,借助Triton编译器的开源和轻量级优势,提供了一套易适配、高性能的算子实现,以推动基于Triron的统一、开源的软硬件生态。

1. 算子库技术选型

在编译技术的多条路线中,统一的中间语言、统一的算子接口、统一的开源算子库都经过了一定的探索和实践。

  • 统一的中间语言:提供更自由的表达能力和更灵活的优化空间,但其设计研发显著依赖硬件架构相关的底层信息,要求厂商的深度参与和多元芯片的高度协作

  • 统一的算子接口:对上层框架能够保持良好的一致性,对下层则要求芯片厂商各自开发算子库,无法确保一致的算子特性,也无法配合使用框架的图优化技术

  • 统一的开源算子库:能够在厂商之间做到源码共享,省去重复开发的成本且保障一致的算子实现,并且能够由厂商对编译器的个性化适配来发挥硬件相关的性能优势

FlagGems采用开源算子库的技术路线,基于OpenAI推出的Triton编程语言及编译器,以eager模式接入PyTorch框架。相比使用Triton的Inductor技术,FlagGems不仅具有同等的简便易用的优点,而且能够更加细致深入地提升算子性能,从而提高模型的训练和推理吞吐。

2. 算子库现状

FlagGems以Llama2、Llava2等十余个国内外热门开源大模型为范例,通过profiler工具监测和分析模型的算子调用情况,汇总到一百余个算子。模型包含了语言、视觉、语音、多模态等各种类型,支持前向推理和反向训练的不同场景,基本能够代表主流大模型的应用实践,覆盖大部分的算子调用需求。

FlagGems以PyTorch框架在eager模式下调用的原生CUDA算子为基线,展现出了强势的性能和可观的优化空间。在访存密集型算子上,FlagGems有部分算子性能超越CUDA算子;在计算密集型算子上,FlagGems基本追平CUDA算子;在融合算子上,FlagGems全面优于CUDA算子。

FlagGems目前已经支持Bert和Llama2两个模型的单机单卡推理,支持Aquila模型的多卡分布式训练。

3. 算子库创新点

3.1 运行时优化

在模型运行的过程中,影响性能的不止有GPU上核函数的执行效率,还有CPU端侧的运行时开销。Triton语言在定义算子功能时会包装Autotuner或Heuristics装饰器,其中Autotuner使用自动调优的方法为核函数选择编译参数,而Heuristics则使用启发式的方法计算编译参数。编译器在执行函数时需要调用所有装饰器的执行序列,复杂的包装会为运行时带来较大的时间开销。

为了尽可能压缩运行时的过程,FlagGems设计了LibEntry机制,使用独立维护的缓存来获取和调用核函数,绕过其他运行时装饰器的多层调用。在算子首次运行时,仍然会沿着Triton的原调用路径进行自动调参和启发式计算来取得编译参数,获得的核函数加入缓存;而当算子再次调用到键值相同的核函数时,运行时机制可以直接从缓存取得核函数,快速进行调用运行。

LibEntry优化技术能够将CPU端的运行时开销降低约70%,在运行时开销为主要瓶颈的小规模算子上获得良好的收益,达到与PyTorch ATen持平的CPU端性能。

3.2 代码生成

Triton算子实现以PyTorch框架定义的张量作为输入和输出,依托Python原生特性无缝融入PyTorch生态。然而Triton函数的操作对象是张量指针,PyTorch的输入输出本质是张量视图,二者的差异给FlagGems的代码编写带来了挑战。

Triton函数中的张量指针与张量在存储上的布局密切相关,使用偏移量访问存储和读写数据;而张量视图则是存储的变形,更关心张量的形状尺寸,对于张量布局和连续性感知不强。在Triton函数处理连续张量时,数据的寻址和访存都比较简单,可以无视指针与视图的差异;而当PyTorch向算子输入非连续张量时,Triton就不能以与连续存储相同的方式来获取数据,强制连续化可能增加的拷贝开销,使得张量步长成为函数中必要的输入信息。

对于高维张量输入,步长的数量是不固定的,鉴于Triton无法支持变长元组参数,算子库需要对所有维度分别编写函数代码,这对开发者造成了一定的负担。FlagGems利用pointwise运算的相似性以及偏移量计算代码的模式化特点,使用自动代码生成的方式处理高维张量的非连续访存问题。

自动代码生成机制能够使用模板生成外层包装函数和Triton核心函数,自动地处理张量广播、索引空间计算、并行参数计算、地址偏移计算等任务。对于经过转置、切片、跨步等处理的非连续张量,自动代码生成的GPU性能可以显著超过强制连续化的方法、达到与PyTorch ATen持平的表现。

下面以两个张量相加为例,分别展示CUDA写法、Triton写法和自动代码生成写法,其中自动代码生成写法,通过简单加法逻辑表示,即可生成Triton核心函数。

4. 算子库规划

FlagGems计划分期实现主流大模型的算子,包括基本数学运算、线性代数、科学计算、张量处理等多种类型的单算子,预计于2024年末完成,到目前为止已经完成了超过50%。

FlagGems算子库完成后,大模型的开发者和使用者可以仅用一行代码将ATen算子替换为FlagGems,便捷地部署到英伟达GPU或其他AI芯片上,而无需考虑代码修改或后端适配等问题。FlagGems的持续优化也会带来更高的推理与训练速度,更加充分地利用芯片算力,辅助和推动大模型进一步的发展。

5. 生态共建

FlagGems本着生态共建的宗旨,已经得到多家公司参与算子开发,如中科加禾、硅基流动;也得到多家芯片企业适配芯片编译器,如天数智芯、沐曦、昆仑芯等;同时,也与新华三等整机厂商联合推广。

智源研究院定期组织Triton中国社区系列活动,推动更多开发者参与。

欢迎体验FlagGems: https://github.com/FlagOpen/FlagGems

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

60页论文参考:基于Java+SpringMvc+Vue技术的智慧校园系统设计与实现

详细查看地址: 基于JavaSpringMvcVue技术的智慧校园系统设计与实现-CSDN博客 基于JavaSpringMvcVue技术的智慧校园系统设计与实现 六、论文参考:

Linux初始化新的git仓库

1.在git服务器上找到项目常部署的git地址可以根据其他项目的git地址确认 例如ssh://git192.168.10.100/opt/git/repository.git 用户名:git(前面的是用户) 服务器地址:192.168.10.100 git仓库路径:/opt/git/ 2.在服务器…

4.2 存储管理

大纲 页式存储必考,段式存储看运气 页式存储 概念

合合信息大模型加速器重磅上线,释放智能文档全新可能

目录 0 写在前面1 高速文档解析引擎:拓宽大模型认知边界2 文本嵌入模型acge:克服大模型感知缺陷3 行业赋能:以百川智能为例总结 0 写在前面 随着人工智能技术的飞速发展,大模型以强大的数字处理能力和深度学习能力,不…

免费插件集-illustrator插件-Ai插件-测量简单路径面积和周长

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件,加强illustrator使用人员工作效率,进行测量路径面积和周长处理。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/878…

【光伏仿真系统】光伏设计的基本步骤

随着全球对可再生能源需求的不断增长,光伏发电作为一种清洁、可再生的能源形式,正日益受到重视。光伏设计是确保光伏系统高效、安全、经济运行的关键环节,它涉及从选址评估到系统安装与维护的全过程。本文将详细介绍光伏设计的基本步骤&#…

Python数据处理之高效校验各种空值技巧详解

概要 在编程中,处理空值是一个常见且重要的任务。空值可能会导致程序异常,因此在进行数据处理时,必须确保数据的有效性。Python 提供了多种方法来处理不同数据对象的空值校验。本文将详细介绍如何对Python中的各种数据对象进行空值校验,并包含相应的示例代码,帮助全面掌握…

Kubernetes k8s Pod容器 探针 健康探测

目录 Pod容器健康探测 为什么要对容器做探测? 启动探测startupprobe 存活性探测livenessProbe 就绪性探测readinessProbe ReadinessProbe LivenessProbe startupProbe配合使用示例一般程序中需要设置三种探针结合使用,并且也要结合实际情况&#xff…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验18 边界网关协议BGP

一、实验目的 1.验证边界网关协议BGP的作用; 2.学习在思科路由器上该协议的使用方法。 二、实验要求 1.使用Cisco Packet Tracer仿真平台; 2.观看B站湖科大教书匠仿真实验视频,完成对应实验。 三、实验内容 1.构建网络拓扑; …

SpringBoot开发实用篇(三)

一:任务 1:SpringBoot整合Quartz 导入SpringBoot整合quartz的坐标定义具体要执行的任务,继承QuartzJobBean定义工作明细和触发器,并绑定对应关系 2:SpringBoot整合task 开启定时任务功能设置定时执行的任务&#x…

222|一周小精进:关于需求、产品和技术壁垒/Momentum, Consolidation, and Breakout(7.8

<希望能够坚持下来.JPG> 一、上接 《一胜九败&#xff1a;优衣库全球热卖的秘密》15000字浓缩精华评注&#xff01;所以&#xff0c;单独研究了一下“摇粒绒”。 1、从优衣库的摇粒绒开始 摇粒绒又称羊丽绒&#xff0c;是针织面料的一种&#xff0c;由大圆机编织而成&…

迅为RK3588开发板RKNPU2项目实战2SORT目标追踪

1.介绍和视频演示2.在模拟器实现图片的目标追踪3.连板推理和嵌入式部署4.视频目标追踪的实现(python)5.C实现目标追踪性能强--iTOP-3588开发板采用瑞芯微RK3588处理器&#xff0c;是全新一代ALoT高端应用芯片&#xff0c;采用8nm LP制程&#xff0c;搭载八核64位CPU&#xff0c…

如何更改WordPress网站的字体(适用于所有主题)

如何更改WordPress的字体的具体方法&#xff0c;需要取决于您使用的是新的区块主题还是比较旧的经典主题&#xff0c;这一点可能会让人感到困惑&#xff0c;本文中我们将详细介绍二者的区别以及如何分别在这两种主题中修改字体的的方法。 区别&#xff1a; 现代区块主题具有内…

相机光学(三十)——N5-N7-N8中性灰

GTI可提供N5/N7/N8中性灰涂料&#xff0c;用于不同的看色环境&#xff0c;N5/N7/N8代表深中浅不同的灰色程度&#xff0c;在成像、工业、印刷行业中&#xff0c;分别对周围观察环境有一定的要求&#xff0c;也出台了相应的标准文件&#xff0c;客户可以根据实际使用环境进行选择…

Transformer常见问题

1.位置编码有哪些&#xff1f; a. 正弦和余弦位置编码&#xff08;Sinusoidal Positional Encoding&#xff09; 原理&#xff1a;使用固定的正弦和余弦函数来生成位置编码。 b.学习位置编码&#xff08;Learnable Positional Encoding&#xff09; 原理&#xff1a;将位置编…

快速入门,springboot知识点汇总

学习 springboot 应该像学习一门编程语言一样&#xff0c;首先要熟练掌握常用的知识&#xff0c;而对于不常用的内容可以简单了解一下。先对整个框架和语言有一个大致的轮廓&#xff0c;然后再逐步补充细节。 前序: Spring Boot 通过简化配置和提供开箱即用的特性&#xff0c…

汇凯金业:天然橡胶的用途和作用

天然橡胶是一种由橡胶树(Hevea brasiliensis)的乳汁加工而成的弹性体&#xff0c;具有弹性好、强度高、耐磨性好、耐寒性好、电绝缘性好、易于加工等优点&#xff0c;是世界上重要的战略物资和不可缺少的工业原料。 天然橡胶的用途十分广泛&#xff0c;主要应用于以下领域&…

java Web实现用户登录功能

文章目录 一、纯JSP方式实现用户登录功能&#xff08;一&#xff09;实现思路1、创建Web项目2、创建登录页面3、创建登录处理页面4、创建登录成功页面5、创建登录失败页面6、编辑项目首页 &#xff08;三&#xff09;测试结果 二、JSPServlet方式实现用户登录功能&#xff08;一…

04_Shell字符串变量

04_Shell字符串 一、字符串拼接&#xff08;推荐双引号&#xff09; 无引号拼接解析变量时不能有空格 单引号拼接无法解析变量 双引号方式可正常解析变量 推荐 二、字符串的长度获取 #!/bin/bash#使用 ${#变量名} 可获取字符串变量长度 var"test" echo "${#va…

[PM]流程与结构设计

流程图 流程就是为了达到特定目标, 进行的一系列有逻辑性的操作步骤, 由两个及已上的步骤, 完成一个完整的行为过程, 即可称为流程, 流程图就是对这个过程的图形化展示 分类 业务流程图 概念: 描述业务流程的一种图, 通过特定符号和连线表示具体某个业务的处理步骤和过程作…