大模型狂欢背后:AI基础设施的“老化”与改造工程

3f0104f69caef4bf7b65afc4ffcc36d7.jpeg
来源:OneFlow社区
作者:River Riddle、Eric Johnson、Abdul Dakak
翻译:胡燕君、杨婷

机器学习模型逐渐发展成人们口中的“庞然大物”。全球顶尖的科技公司纷纷踏上“军备竞赛”之路,立志训练出规模最大的模型(MUM、OPT、GPT-3、Megatron),而其他专注于生产系统的公司也相继扩大其原有模型,并取得良好成果。

一切如火如荼,然而,鲜少有人提及,庞大的模型给现有的AI基础设施和开发流程带来了诸多实际性挑战。

大模型的权重可达100+GB,而目前的开发工具却还没跟上,使用起来十分费力,部署时往往要等上好几分钟甚至好几小时,这已经成为AI工程师的隐痛,不但浪费工程师的时间,降低工作效率,还会拖慢迭代速度。

致力于AI基础设施工具研发的Modular团队认为,开发人员的工作效率是训练和部署模型的最大成本之一。因此需要不断优化工具链,提升早期用户的体验,也方便开发人员。本文探讨编译过程中管理海量数据的技术难点,以及Modular为解决这些难点在基础设施(以及MLIR编译器框架)方面所做的改进。由OneFlow社区(ID:OneFlowTechnology)编译。 

1

AI模型配套工具的易用性不足

机器学习中的图转换(Graph Transformations)、优化和编译器等技术的作用是提升AI模型的性能和便携性,让模型可以部署在某些目标硬件上。

编译器中,有TensorFlow Lite Converter这样的高层次“编译器”,它可以将TensorFlow SavedModel模型转换为高度优化的程序格式(如FlatBuffer格式),让模型可以在边缘设备上执行;也有XLA和TorchScript JIT Compiler这样针对特定领域的编译器,它们为AI模型创建中间表示(可能是一张“图”),然后将其编译成另一种格式——例如机器码或特定领域的运行时表示(如CUDA图)。

AI图的编译与传统的编译很不一样。AI图包含两部分:图拓扑(各层之间如何连接)和模型权重(特定层的参数)。从大小来看,图拓扑以KB为单位,权重则以MB甚至GB为单位。举个例子,Meta公司发布的Open Pre-trained Transformers模型,其参数量从300亿、660亿到1750亿不等,相当于100+GB权重。Gopher和Megatron模型甚至更大。

8663b07388b6bddc603a440557c10c93.jpeg

图源DeepMind论文

AI生态系统中现有的工具尚不能很好地处理大型模型。比如,Protobufs限制了传输数据大小不能超过2GB,因此模型如果使用Protobufs序列化格式,就会备受掣肘。最新版TensorRT的文档中写道,“对于BERT和GPT等基于Transformer的神经网络模型,TensorRT在编译时可以消耗10倍于模型大小的CPU内存”,可见TensorRT不适合大型模型。如果使用ONNX文件格式存储大型模型,就必须将模型权重分成多个文件分别存储。

以上种种不但给AI开发工作流增加了不必要的复杂环节,也使模型丧失“单一事实来源”(SSOT),还导致模型分发更加困难。

为了应对模型权重太大的问题,大家可能会采取变通方法,最终却可能导致整个AI开发工作流变得更复杂。比如,由于某些编译器阶段耗时长达2分多钟,打断开发人员的工作节奏,所以Modular构建了一种缓存临时文件的机制。

虽然这种缓存机制和其他变通方法一样,只是治标不治本:它既非100%可靠,也不能解决Cache Miss(缓存缺失)的问题,不过由于Modular十分注重提高开发人员的工作效率,所以还是决定采用这种机制。

2
Modular编译栈中的MLIR

 
Modular的技术栈中,MLIR编译器架构负责表示和转换AI模型,包括AI算子图(用于多种框架)、中级运行时原语和低级机器码生成。

a8c8ea2422884dec7002858876852706.jpeg多级中间表示 (MLIR)

MLIR是LLVM编译器基础设施项目的子项目,LLVM旨在提供现代工具包,用以构建针对特定领域的编译器。MLIR提供一套核心组件,用于硬件设计、量子计算、人工智能等多种计算领域的建模、分析和转换。

MLIR能够帮助构建单个涵盖全栈的完整系统,比常规的技术栈功能更强大、模块化程度和可拓展性更高,也更易于维护。使用统一的基础设施让我们得以便捷地将每一项改进迁移到自己的工具栈,使开发工作流实现更高的模块化和可组装性。

除了Modular以外,TensorFlow、XLA、PyTorch和ONNX等也在使用MLIR进行模型表示和转换。随着MLIR的用户生态不断扩大,在赞美MLIR优点的同时,也必须继续进行改进和完善。 

3

MLIR管理权重的方法还有待提高

 
MLIR的基本组成部分之一是属性机制(Attribute),可以把它理解为被unique(或被memoize、intern)的常量数据。属性是用户可拓展的,也就是说,可以根据不同用例使用不同的属性类型。很多类型的值都可以被赋予属性,比如常量表达式值(如“5”、“10.0”等)、字符串字面量、枚举值(如“小于”、“大于”、“等于”等),数据组等等。大多数基于MLIR的AI工具都使用属性来保存AI模型的权重。

然而,问题出现了:模型权重有可能极其庞大,但MLIR存储2 GB权重的方式和存储4 B权重的方式并没有区别——都使用同一属性,该属性包含一组被unique的元素。但对GB级的庞大数据使用unique方法显然不合理。

这个方法的难点在于:在MLIR中,当某个东西被unique,它就会被分配(allocated)、被hash 、然后被储存到MLIRContext中。这些东西具有和MLIRContext相同的生命周期,只有当MLIRContext被销毁,它们才会同时被销毁。对于小的数值而言,这种机制带来很多好处,可以把数值传入传出,可以通过指针对unique后的值进行比较,还可以共享属性的内存分配(十分常见)等等。

但对数量庞大的权重而言,上述种种好处就变成了劣势:我们不希望对权重进行重新分配、复制或使用unique方法,我们只需要它们短暂存在——当计算不再需要引用这些权重时,就要允许释放分配。例如,当运行模型量化工具时,需要对算子图进行转换,并生成新的权重,最终这些权重可能会被复制多份,大量权重副本在编译结束前都将一直占用内存。 

ML工具的另一个问题是MLIR如何序列化至文件系统。一开始,MLIR没有二进制序列化格式,只有文本格式。对数量庞大的权重来说,这就造成问题,因为每个字节的二进制数据都会被转化为十六进制,后者占用的空间为前者的2倍。这样一来,我们不但耗费了相当长的时间进行进制转换(一个中等的GB级模型大概需要20秒),而且转换后的中间文件还是原来的2倍大——2倍可是一个不小的数字!

4
内存占用:比拖慢开发效率更严重的影响


这一设计机制本意虽好,但它有可能降低编译效率,即便用最好的编译器也无济于事。最明显的问题是它会导致编译、监控和转换模型的时间变长。但凡你曾用过“我的代码还在编译”作为日常摸鱼的借口,你就明白等待编译是多么痛苦的事情。采用这一机制,就意味着处理器不得不对GB级数据持续进行分配、复制和hash处理。

0b88afed9765ef67454231c65824ef2a.jpegXKCD漫画 – 《还在编译》 

比编译时长更严重的问题是内存占用,它会影响Modular技术栈中的其他架构功能的实现。例如,由于我们的编译器和技术栈本身都高度并行,而且使用线上搜索等高级功能,内存占用会直接导致一些工作不能并行展开,也导致不能取得最高质量的结果。

Modular的价值核心是构建用户喜欢的工具。高级功能如果不好用,或者会影响效率,又或者附带一些注意事项(比如,“该功能对某些情况不适用”),那么用户就根本不会用。因此,Modular致力于解决庞大权重带来的基础性问题,简化用户的使用流程和开发人员的工作流程。

5
MLIR的核心改进

Modular团队是MLIR项目的重要贡献者,Modular企业文化的一大要点是“做对的产品”,Modular参与的所有项目都遵循这一要义。在推动MLIR发展的同时,Modular竭力保证MLIR项目的每一步路都正确,也加强与MLIR社区的合作,为所采取的办法争取认可。 

Modular团队列出了大型模型工具应该具备的特点:

  • 非必要不分配内存:对大型数据(比如权重)而言,从磁盘中实行内存映射比将数据复制到已分配内存的block中更高效。

  • 无需进行hash或unique处理:我们不希望费力气去检查2 GB Blob数据的相等性;要辨别权重,希望能够通过名称辨别,而不是看具体内容有没有被unique。

  • 允许内联变更(Inline Mutation):如果数据只需要在一处使用,应当允许在原位置量化、转化和操作数据,而不是先复制数据。

  • 允许释放内存(deallocation):由于大模型的数据量十分庞大,因此当对某一数据的所有引用都不存在时,应当允许释放内存。

  • 快速序列化:无论是即时编译,搜索优化参数,还是本地迭代,都需要缓存IR,所以这一步必须快。


上述观点并不新颖,但传统编译器(比如适用于典型CPU编程语言的编译器)却还没有实现这些要求。 

6
调整权重属性


上述前四点要求解决了我们应该如何使用MLIR这一基本问题:权重虽然是常量数据,但对它的管理应该区别于其他MLIR属性。一直以来,我们的权重管理方式都很不适宜,这就好比试图将一块方钉挤进圆孔中,不仅浪费了空间,降低了我们的开发速度,同时也增加了用户成本。

所以Modular决定换一种方法来管理权重数据,这促成了MLIR的第一个基本扩展机制——“Resource机制”,在计算中将数据和对数据的引用区分开来。

在Resource机制中,序列化MLIR的每个Blob都可能包含额外的信息段,称为Resource。Resource要么是dialect(扩展MLIR时使用的类似namespace的抽象),要么是用于特定工具链数据的“外部(external)”资源。Resource中的数据用简单的键值对表示,创造出如下图所示的类似json的结构。

/// Here we have some MLIR operations.
module {func.func @foo() {// Cool stuff here ...}
}/// Here we have an `external_resources` section. The resource section's syntax is designed to be unique as to not conflict with other MLIR syntax (which is user extensible!).
{-#external_resources: {mlir_reproducer: {pipeline: "func.func(cse,canonicalize),inline",disable_threading: true}}
#-}

上面例子展示了如何调整MLIR来用Resource进行复现。MLIR再生器(Reproducer)实际上是一种配置,它包含转换管道(Transformation Pipeline)等执行信息,用于复现某种故障或失败。在使用Resource之前,我们通过在MLIR文件顶部添加注释来表示这些执行信息。现在可以利用Resource将这些执行信息合并为第一类信息。

从前需要进行unique处理导致长期占用内存的大型权重数据,现在可以利用Resource机制进行储存。在IR中,我们对属性采用轻量级引用而不再采用底层数据:

397784f07949ea482b3415fdeb97832b.jpeg

其他优势:

  • 使用IR进行调试时更不容易出错,从而带来更好的开发体验:Resource是专门的信息段;我们不必担心在调试时会不小心转储整整4GB的数据。

  • 我们可以在无需数据的情况下合理地处理IR:因为IR只保存对数据的引用,不保存数据本身,如果需要,我们可以省略底层Resource数据。这样做的好处包括可以极大地简化再生器生成流程,再生器本来就不需要用到大型权重数据(设想一下,你以前需要向同事发送1.2GB的再现器文件,现在的再生器文件只有20MB大)。


通过引入Resource这个新概念,我们在程序和数据之间建立清晰的分离机制。现在,我们不再将权重数据直接传递给某一属性。相反,我们向属性传入一个弱引用,并将权重数据传给一个专门的管理器。这样,我们就能更好地控制权重分配、变更和销毁的时间和方式。

7
新增MLIR二进制编码方式

 
有了更好的权重表示方法之后,下一步我们只需找到更高效的权重储存方法来完成MLIR表示的序列化。 

到此为止,MLIR只有文本序列化格式,这种格式使用ASCII十六进制字符串来表示权重。然而,Modular的终极目标是尽可能加快本地开发流程,因此需要摒弃文本序列化格式,为MLIR新增合适的二进制格式(https://discourse.llvm.org/t/rfc-a-binary-serialization-format-for-mlir/63518)。

二进制格式需要考虑很多因素,况且二进制格式决定了编译器的稳定性。MLIR需要高度的灵活性才能高效应对各种各样的用例,需要实现高速度,而且MLIR/LLVM不能依赖第三方编码库。

不过,MLIR的一大好处是编码难度极低。因为MLIR中所有操作的结构都相同,所有操作都可以使用相同的编码方式。上述的种种复杂要求都是为了保证MLIR核心概念的紧凑和高效。考虑到这些限制,我们决定为MLIR定制编码方式

(https://mlir.llvm.org/docs/BytecodeFormat/)。

8
用户收益


为MLIR增加Resource机制和二进制编码方式大大加速了工具链和开发流程,并大幅降低内存占用,提高了性能和速度表现,也整体改善了MLIR。

59a3e17243affe0580d719b733cae948.jpeg

为了验证上述改进带来的性能变化,可以测试不同规模的模型上基于MLIR的图编译器中“降级”和“优化”步骤的实际速度(将TensorFlow序列化模型转化为符合MLIR运行时输入格式的模型),以及该过程中的实际内存占用。 

速度提升:编译工作流

测试结果发现,MLIR的速度大幅提升。从TensorFlow序列化模型(TensorFlow 2.10模型)转化为MLIR运行时输入格式的模型,这一过程涉及大量底层表示转换,经过改进后,实际执行时间缩短了1.8~2倍,执行速度随模型大小按比例缩放。

具体而言,处理TensorFlow序列化模型耗时极短——生成MLIR时将大量权重数据写入磁盘这一步骤是主要的耗时来源。经改进后,代码处理时间比原来快10倍,整体执行时间的快慢主要取决于固态硬盘(SSD)将 >1 GB数据写入磁盘的速度。

ML开发人员使用我们的工具,可以加快模型编译速度,从而提升生产效率,减少迭代时间。我们的工具可以优化生产环境以及模型的加载和编译,包括基于流入数据的动态模型加载和卸载,以及各种个性化或经过精细化调整的用户模型。

速度提升:序列化

引入二进制编码方式不但可以加快编译工作流,还能加快序列化速度。通过外部工具与MLIR进行交互,包括运行时类型检查(Introspection)、缓存和再生器生成等,都需要对序列化MLIR进行读写。

通过对不同规模的模型进行了序列化测试,结果同样发现峰值性能大幅提速,且SSD写入步骤依然为主要耗时来源。具体而言,大型模型文本数据的读取耗时约5秒,而二进制数据的读取耗时仅不到10毫秒;二进制格式的写入速度则约是文本格式数据的5倍。

对Modular而言,引入二进制编码方式可以加快以MLIR为中心的基础设施和工具的开发速度,改善原本高成本、低速度的开发状况。比如,调试器(Debugger)的效率很大程度取决于编译工作流中缓存模型表示的效率,而引入二进制编码方式可以提高调试器的效率,从而提高底层编译器的性能。 

内存占用

二进制序列化格式的mmap(一种内存映射方法)性能以及通过Resource机制实现的IR和数据的相互独立性可以大幅减少内存占用。测试发现,各种规模的模型编译流程中的内存占用都大大降低——因为以前需要为模型权重分配内存,现在不需要了。

9
升级AI生态

Modular的愿景不只是为了方便我们自己,而是升级整个AI行业的生态。前文提及的新型Resource表示和二进制编码方式都已提交至上游的LLVM/MLIR仓库中。 

Modular起初的研发动机是为了解决Modular的客户遇到的问题并提升自身内部基础设施,但这些改进产生的积极影响并不限于自己的用例,还能改善其他以MLIR为基础技术的产品。例如,由于二进制编码方式的引进,MLIR社区如今正在讨论如何保证MLIR的稳定性(https://discourse.llvm.org/t/mlir-generic-ir-stability-and-upgradability/65371)。

这些基础技术的改进最终都会融入产品中为用户服务。以上只是Modular致力提升的无数核心技术之一。Modular一方面竭力适应大模型,一方面努力完善模型在设备上的部署,目标都是大幅提升AI基础设施的性能和易用性。Modular非常看好AI的未来以及LLVM和MLIR的发展。

(本文由OneFlow社区翻译,译文转载请联系OneFlow获得授权。

原文:1. https://www.modular.com/blog/increasing-development-velocity-of-giant-ai-models;2.https://www.modular.com/blog/increasing-development-velocity-of-giant-ai-models-part-2)

未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)大脑研究计划,构建互联网(城市)大脑技术和企业图谱,为提升企业,行业与城市的智能水平服务。每日推荐范围未来科技发展趋势的学习型文章。目前线上平台已收藏上千篇精华前沿科技文章和报告。

  如果您对实验室的研究感兴趣,欢迎加入未来智能实验室线上平台。扫描以下二维码或点击本文左下角“阅读原文”

2252f186bcbb80b1ed2298ff836cde9a.jpeg

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

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

相关文章

DeepMind 最新发文:AlphaZero 的黑箱打开了

来源:AI科技评论作者:李梅编辑:陈彩娴AlphaZero 表明神经网络可以学到人类可理解的表征。国际象棋一直是 AI 的试验场。70 年前,艾伦图灵猜想可以制造一台能够自我学习并不断从自身经验中获得改进的下棋机器。上世纪出现的“深蓝”…

陶哲轩:张益唐新论文存在一些技术问题,我已请他澄清

来源:梦晨 羿阁 发自 凹非寺量子位 | 公众号 QbitAI张益唐的零点猜想证明,该由谁来检验?不少人把目光投向陶哲轩。最新消息,陶哲轩已经读过张益唐的论文并做出点评:目前论文的基本正确性尚未得到确认。存在一些印刷错误…

MIT提出封闭式连续时间神经网络,解决大脑动力学问题可产生灵活的机器学习模型...

编辑/绿萝去年,麻省理工学院(MIT)的研究人员开发出了「液体」神经网络,其灵感来自小型物种的大脑,不仅能在训练阶段学习,而且还能持续不断地适应。可用于自动驾驶和飞行、大脑和心脏监测、天气预报和股票定…

自上而下的因果关系:数学结构与观察者

导语复杂性的基础是模块化的分层结构,导致基于较低级别网络的结构和功能的涌现级别。通俗而言,当需要执行复杂的任务时,可以将其分解为子任务,每个子任务都比整个项目更简单,需要更少的数据和更少的计算能力&#xff0…

从大脑中汲取灵感,能效提高了1000倍,新芯片拓展AI的可能性

来源:ScienceAI人工智能算法无法以目前的速度保持增长。像深度神经网络这样的算法——它受到大脑的松散启发,多层人工神经元通过称为权重的数值相互连接——每年都在变大。但如今,硬件改进已无法跟上运行这些海量算法所需的大量内存和处理能力…

5G/6G:构建一个更加互联智能的世界

来源:IEEE电气电子工程师在过去几年中,随着5G网络技术的兴起,5G基础建设与应用也日渐成熟。2023年,通信行业的发展步伐也并未放缓。在《IEEE全球调研:科技在2023年及未来的影响》中显示,当半数的受访者谈及…

Science 撤稿“天使粒子”论文,原始数据受质疑

海归学者发起的公益学术平台分享信息,整合资源交流学术,偶尔风月11月18日, Science 撤下了王康隆、张首晟等科学家完成的著名“天使粒子”论文。2021年3月 Nature 也撤回了代尔夫特理工大学的一篇“天使粒子”相关的论文。两篇重量级论文的倒…

2022年全球人工智能产业态势分析

来源:学术plus 作者:学术plus观察员 曹文,惠文审核:行业研究顾问 辛鑫,行雁国家战略风向1.1 全球主要国家密集发布政策举措,争夺人工智能领域优势2022年全球主要国家在人工智能领域的竞争仍然激烈。据英国牛…

你与植物人有何区别?意识与复杂性的新研究给你答案

来源:Mindverse Research作者:郭瑞东相比无意识的时间,当你有意识时,你会有怎样的直观感受?是觉得更加不可预测,还是能够用相距更长的事件进行描述?如果将有意识时的大脑活动记录下来&#xff0…

NeuroAI作者,冷泉港主任独家专访:忽视神经科学给我们的启示是愚蠢的

来源:智源社区采访&整理:李梦佳校对:熊宇轩神经科学究竟如何启发AI?不同路径如何殊途同归?智源社区采访了NeuroAI白皮书的第一署名作者,来自冷泉港实验室(Cold Spring Harbor Laboratory&am…

AI再卷数学界,DSP新方法将机器证明成功率提高一倍

来源:机器之心编谷歌的吴宇怀 (Yuhuai Tony Wu)等研究者设计了一种叫做「Draft, Sketch, and Prove」 (DSP)的新方法将非形式化的数学证明转化为形式化的证明。实验结果显示,自动证明器在 miniF2F 上解决的问题比例从 20.9% 提高到了 38.9%。自动证明数学…

华人数学家死磕欧拉方程10年,用计算机找到了让它失效的“奇点”

来源:金磊 发自 凹非寺量子位 | 公众号 QbitAI专研长达10年,论文足足177页。华人数学家通过计算机,找到了让著名欧拉方程失效的“奇点”。△图源:Quanta Magazine欧拉方程,是250年前(1755年)由瑞…

张益唐零点问题论文会是什么结果?

关注 哆嗒数学网 每天获得更多数学趣文最近,菲尔兹奖得主在他的一篇旧博文的评论区对张益唐关于朗道-西格尔猜想的论文进行了评论。大概意思是,论文还没被确认是正确的,因为文章已经发现的各种问题,其中一些问题还是阻碍验证的过程…

大型互联网系统架构演进,BATJ其实无需神化……

来源:云技术一、前言说到互联网系统架构,在互联网行业日渐成熟的今天,一谈到这背后的技术体系,很多人脑海中可能就会浮现从网上看到的,一个个庞大的知识图谱,能说地清楚其中一二的同学,自然是志…

AI能否改变我们发现新药的方式?哈佛医学院团队开发AI驱动的药物发现平台

编辑 | 绿萝世界人口老龄化、慢性病和传染病负担日益加重,迫切需要安全有效的药物来满足全球数十亿人的医疗需求。然而,发现一种新药并将其推向市场是一个漫长、艰巨且昂贵的过程。长期以来,人工智能(AI)一直被认为能够…

城市大脑的基本原理与战略意义分析

本文发布于2022年10月中国指挥与控制学会会刊作者:刘锋城市大脑是21世纪以互联网为核心的世界数字生态向类脑结构演化并与智慧城市结合的产物,世界统一的数字神经元将人、物、系统和组织有机的结合在一起实现万物互联,云反射弧机制实现数字神…

“史上最贵”世界杯,暗藏哪些传感器黑科技?

来源:综合来源:科技日报、IDG资本、中国日报双语新闻、感知芯视界等编辑:感知芯视界2022年卡塔尔世界杯(FIFA World Cup Qatar 2022)是第二十二届世界杯足球赛,是历史上首次在卡塔尔和中东国家境内举行、也是继2002年韩日世界杯之…

刘庆生:学术需要批判氛围

来源:刘庆生科学网博客链接地址:https://blog.sciencenet.cn/blog-673617-1364620.html作者:刘庆生(中国地质大学)最近在抖音上看了复旦大学特聘教授张汝伦的一个短视频。他在视频中提到,上海电视台采访一位…

斯蒂芬·沃尔夫勒姆 | 圣塔菲研究所的初创故事

来源:集智俱乐部 作者:斯蒂芬沃尔夫勒姆 数学家、物理学家、计算机科学家导语:圣塔菲研究所被誉为复杂性科学的圣地,被称为“没有围墙的研究所”,那么它是如何创建发展起来的呢?2019 年,为了纪…

为什么地球的生物都是碳基生命?科学家:大自然环境选择的结果

来源:科学的乐园地球是一个有着多达数百万种生物形式的生命世界,不管这些物种的外形有多大的差异,也不管是植物还是动物,它们都有一个共同的本质,都是碳基生命。可能有朋友会说了,生命体内最多的物质不是氧…