当前位置: 华文世界 > 科技

飞桨新一代框架——飞桨框架3.0-beta昇腾版:「动静统一自动并行、大模型训推一体」等新特性构筑大模型时代核心生产力

2024-08-27科技

深度学习框架作为基础软件,不仅促进了深度学习技术的飞速进步,更为⼈⼯智能技术的⼴泛应⽤铺设了坚实的基础。

深度学习框架为开发者提供了便捷易⽤的开发接⼝,这些接⼝对数据和操作进⾏了⾼度抽象,使得开发者能够更专注于算法和模型的设计,⽽不必深陷底层数据的处理细节。通过这些接⼝,开发者⽆需直接感知和应对复杂的硬件底层开发细节,从⽽极⼤地提升了开发效率和体验。其次深度学习框架还提供了⾃动微分这⼀强⼤功能,开发者通常只需要编写前向传播⽹络的代码,⽽繁琐的反向传播⽹络则交由框架⾃动完成。

飞桨作为中国⾸个⾃主研发、功能丰富、开源开放的深度学习平台,从默认使⽤静态图的1.0版本,到默认采⽤动态图并可实现动静统⼀与训推⼀体的2.0版本发布,飞桨框架已经可以完美融合动态图的灵活性与静态图的⾼效性,并⽀持模型的混合并⾏训练。

如今,为⼤模型时代⽽精⼼打造的3.0版本正式出炉!飞桨正式开启了新⼀代框架技术创新之路!

01

设计思想

深度学习框架的设计对于推动⼈⼯智能技术的发展⾄关重要,其核心设计目标是让深度学习技术的创新与应用更简单。

要想实现这⼀⽬标,需要考虑以下两点:

▎框架需要充分考虑开发者和硬件⼚商的需求。

从⽤户角度出发,⼀个优秀的深度学习框架应当为开发者提供极致的开发体验。这不仅仅意味着提供⼀个⽤户友好的开发环境,更重要的是要能够⼤幅度减少开发者的学习成本和时间成本,同时显著提升开发的便利性。为此,飞桨框架提出了「动静统⼀、训推⼀体、⾃动并行」的理念,极⼤地提⾼了开发效率。

从昇腾适配⻆度出发,框架必须能够⽀持并且充分发挥昇腾硬件的性能优势。这要求框架能够⽀持昇腾硬件接⼝,同时,为了充分发挥昇腾硬件的性能,框架还需要具备软硬件协同⼯作的能⼒,确保在利⽤昇腾硬件资源时能够达到最优的性能表现。

▎与此同时,好的框架还需要考虑到 AI 技术发展的整体趋势、产业的实际落地应⽤的需求。

  • 技术发展层⾯,⼤语⾔模型(Large Language Model,简称 LLM)、混合专家系统(Mixture of Experts,简称 MOE)、多模态以及科学智能(AI for Science)等前沿技术逐渐成为新的研究热点。随着模型复杂性的增加,计算瓶颈、存储瓶颈、访存瓶颈以及通信瓶颈等问题逐渐凸显,对分布式训练和通⽤性能优化的需求⽇益迫切。

  • 在产业化层⾯,框架⼜需要具备⽀持训练、压缩、推理⼀体化的全流程能⼒。这意味着,从模型的训练到优化,再到昇腾硬件实际部署和推理,框架应当提供⼀套完整、⾼效的解决⽅案,才能满⾜产业界对于深度学习技术的实际需求。

  • 只有跟得上趋势、经得住打磨的框架,才能为产学研各界开发者提供持续稳定的⽀持。

    飞桨框架3.0的设计理念和主要特色

    综上需求,飞桨将为开发者提供⼀个「动静统⼀、训推⼀体、⾃动并⾏、⾃动优化、⼴泛硬件适配」的深度学习框架,开发者可以像写单机代码⼀样写分布式代码,⽆需感知复杂的通信和调度逻辑,即可实现⼤模型的开发;可以像写数学公式⼀样⽤ Python语⾔写神经⽹络,⽆需使⽤硬件开发语⾔编写复杂的算⼦内核代码,即可实现⾼效运⾏。

    飞桨框架 3.0 版本应运⽽⽣,延续了2.x 版本动静统⼀、训推⼀体的设计理念,其开发接⼝全⾯兼容2.x 版本。这意味着,使⽤2.x 版本开发的代码,在绝⼤多数情况下⽆需修改,即可直接在3.0版本上运⾏。在飞桨框架3.0-beta 昇腾版中,着重推出了动静统⼀⾃动并⾏、⼤模型训推⼀体、⼤模型昇腾硬件适配三⼤新特性。这些特性在飞桨框架2.6版本或更早版本时就已经开始开发,⽬前已达到外部可试⽤的阶段。这些新特性显著提升了使⽤体验、性能、⼆次开发便利度以及硬件适配能⼒。飞桨正式发布3.0版本,此版本改进了框架2.x 版本部分已有功能,并且在不使⽤新特性的情况下,表现成熟稳定。

    02

    框架架构⼀览

    为了实现深度学习框架的上述特性,必须对框架的架构进⾏精⼼设计,确保其能够⽀持各种复杂的模型构建,同时与多样化的芯⽚实现⽆缝对接。接下来,将通过直观的架构图,详细展示飞桨新⼀代框架内所涵盖的功能模块,以及这些模块之间的相互作⽤与联系。以下为飞桨框架3.0的架构图。

    飞桨框架 3.0 架构图

    丰富接⼝:飞桨框架对外提供了丰富的深度学习相关的各种开发接⼝,如张量表示、数学计算、模型组⽹、优化策略等。通过这些接⼝,开发者能够便捷地构建和训练⾃⼰的深度学习模型,⽆需深⼊到底层的技术细节中去。

    在开发接⼝之下,飞桨框架可以划分为4个层次:表示层、调度层、算⼦层和适配层。

  • 表示层:专注于计算图的表达与转换,通过⾼扩展中间表示 PIR,为动转静(动态图转为静态图)、⾃动微分、⾃动并⾏、算⼦组合以及计算图优化等核⼼功能提供坚实⽀撑。

  • 调度层:负责对代码或计算图进⾏智能编排与⾼效调度,并且能够根据实际需求进⾏显存和内存的管理优化,⽀持动态图和静态图⾼效执⾏。⽆论开发者选择使⽤动态图还是静态图进⾏模型开发,飞桨框架都能提供⾼效的执⾏环境,同时确保资源利⽤的最优化。

  • 算⼦层:由神经⽹络编译器 CINN 和算⼦库 PHI 共同构成,涵盖了张量定义、算⼦定义、算⼦自动融合和算⼦内核实现等关键功能。

  • 适配层:则⽤于实现与底层芯⽚适配,包括设备管理、算⼦适配、通信适配以及编译接⼊等功能。

  • 03

    升级的主要模块介绍

    1) ⾼扩展中间表示 PIR:通过打造全架构统⼀的中间表示,突破框架层各模块壁垒,提升飞桨在科学计算、编译优化、⼤模型领域的潜⼒;

    2) ⾃动并行:降低大模型场景模型开发和性能优化的成本,⼤幅提升⼤模型场景的⽤户体验

    ▎⾼扩展中间表示 PIR

    计算图中间表示(Intermediate Representation,即 IR)是深度学习框架性能优化、推理部署、编译器等⽅向的重要基⽯。近些年来,越来越多的框架和研究者将编译器技术引⼊到深度学习的神经⽹络模型优化中,并在此基础上借助编译器的理念、技术和⼯具对神经⽹络进⾏⾃动优化和代码⽣成。在⼤模型时代,对 IR 在灵活性、扩展性、完备性有了更⾼的要求。

    因此在3.0版本下,飞桨在基础架构层⾯规范了中间表示 IR 定义,实现全架构统⼀表示,实现上下游各个⽅向共享开发成果。飞桨的新⼀代 IR 架构聚焦于⾼度灵活和⾼扩展性两个重要维度,通过更加完备且鲁棒的语义表达能⼒、训推全架构统⼀表示和⾼效可插拔的性能优化策略(Pass)开发机制,实现复杂语义⽀持,更便捷地⽀撑⼤模型⾃动并⾏下丰富的切分策略,⽆缝对接神经⽹络编译器实现⾃动性能优化和昇腾硬件适配。

    训推一体的统一表示和性能优化策略(Pass)机制

    飞桨中间表示(PIR)在底层抽象了⼀套⾼度可扩展的基础组件,涵盖 Type、Attribute、Op、Trait 和 Interface,并引⼊了 Dialect 的概念,赋予开发者灵活扩展与⾃由定制的能⼒,从⽽提供了全⾯且稳健的语义表达能⼒。在模型表示层,通过多 Dialect 的模块化管理和统⼀多端表示,实现了训练与推理⼀体化的全架构统⼀表示,实现了算⼦和编译器的⽆缝衔接,⽀持⾃动优化和多硬件适配。在图变换层,通过统⼀底层模块并简化基础概念,向⽤户提供了低成本、易⽤且⾼性能的开发体验,以及丰富且可插拔的 Pass 优化机制。飞桨 PIR 坚守静态单赋值(SSA)原则,确保模型等价于⼀个有向⽆环图,并采⽤ Value 和 Operation 对计算图进⾏抽象,其中 Operation 代表节点,Value 代表边。

  • Operation 表示计算图中的节点:每个 Operation 表示⼀个算⼦,并包含零个或多个 Region。Region 表示⼀个闭包,它内部可以包含零个或多个 Block。⽽ Block 则代表⼀个符合静态单赋值(SSA)原则的基本块,其中包含零个或多个 Operation。这三者之间通过循环嵌套的⽅式,能够构建出任意复杂的语法结构。

  • Value 表示计算图中的有向边:它⽤于连接两个 Operation,从⽽描述了程序中的 Use-Define 链(即 UD 链)。其中,OpResult 作为定义端,⽤于定义⼀个 Value;⽽ OpOperand 则作为使⽤端,描述了对某个 Value 的使⽤情况。

  • 飞桨提供了 PatternRewriter 和 Declarative Rewrite Rule(简称 DRR)这两种 Pass 开发机制,兼顾了⾃定义的灵活性与开发的易⽤性。采⽤三段式的 Pass 开发⽅式,使开发者能够更加专注于 Pass 逻辑的处理,⽽⽆需关注底层IR的细节。

    ▎动静统⼀⾃动并⾏

    为什么我们要做⾃动并⾏?

    当前⼤模型主流训练⽅式,会⽤到多种并⾏策略,这些并⾏策略基于动态图模式实现的「⼿动」并⾏⽅式,即在单卡的基础上,⼿⼯处理切分(切分 Tensor、计算图)、通信(添加通信算⼦)、显存优化(显存共享、Re-Compute)、调度优化(流⽔线编排、计算和通信异步)等策略,开发者既要熟知模型结构,也要深⼊了解并⾏策略和框架调度逻辑, 使得⼤模型的开发和性能优化⻔槛⾮常⾼。除了要有专门算法团队负责模型算法创新,还必须有专门负责模型并行优化的团队配合,这给⼤模型的创新和迭代带来了诸多障碍。

    我们举⼀个简单的例⼦,来阐释下⼤模型开发和单卡逻辑的差异,由于并⾏策略会引起 Tensor 运⾏时 shape 发⽣变化,所以与 shape 处理相关的算⼦均需考虑是否会受到并⾏策略的影响。如下⾯ reshape 的处理,切分策略导致输⼊ shape 发⽣了变换,所以输出的 shape 需要根据切分策略进⾏合理的调整:

    (详细代码请进入百度AI公众号内同篇文章查看)

    为此,我们提出了动静统⼀的⾃动并⾏⽅案。开发者仅需少量的张量切分标注,框架便能⾃动推导出所有张量和算⼦的分布式切分状态,并添加合适的通信算⼦,保证结果正确性;最后会根据模型结构和集群信息,结合显存、调度层优化,⾃动寻找最⾼效的分布式并⾏策略。

    在⾃动并⾏设计中,开发者仅需少量的张量切分标注,我们将切分⽅式进⾏抽象,共需两类切分⽅式:切分张量(参数,输⼊)和切分计算图(流⽔线)。为实现这两类切分⽅式,框架需要⼀种机制来描述分布式张量和计算设备之前的映射关系,为此我们引⼊ ProcessMesh 和 Placements 两个分布式概念,其中 ProcessMesh 将⼀块 GPU 卡映射为⼀个进程,将多个设备映射为多个进程组成的⼀维或多维数组,下图展示了由 8 个设备构成的两种不同 ProcessMesh 抽象表示。

    Placements 是由 Replicate、Shard、Partial 三种分布式标记组成的列表,长度和 ProcessMesh 的维度⼀致,⽤于表示分布式张量在对应计算设备的维度上,按照哪种分布式标记做切分,这三种分布式标记的详细描述如下:

    如下图所示,Replicate 表示张量在不同设备上会以复制的形式存在;Shard 表示按照特定的维度在不同设备上进⾏切分;Partial 表示设备上的张量不完整,需要进⾏ Reduce Sum 或者 Reduce Mean 等不同⽅式的操作后,才能得到完整的状态。

    在完成分布式标记抽象后,我们通过调⽤
    paddle.distributed.shard_tensor()
    接⼝,实现对张量切分的标记。通过张量切分的标记和⾃动推导,我们可以表示复杂的分布式混合并⾏,下图展示了⼀个具体的数据并⾏、张量模型并⾏、流⽔线并⾏组成的混合并⾏的例⼦。

    以下代码展示了混合并⾏的具体例⼦。

    (详细代码请进入百度AI公众号内同篇文章查看)

    通过采⽤⾃动并⾏的开发⽅式,开发者⽆需再考虑复杂的通信逻辑。以 Llama 任务为例,分布式训练核⼼代码量减少了50%,从⽽⼤⼤降低了开发的难度;从我们的⼀些实验可知,借助全局的分析等优化,性能也优于动态图⼿动并⾏的性能。

    未来,我们将进⼀步探索⽆需使⽤张量切分标记的全⾃动并⾏,让开发者可以像写单机代码⼀样写分布式代码,进⼀步提升⼤模型的开发体验。

    04

    ⼤模型昇腾适配

    飞桨与昇腾就⼤模型⽀持进⾏了适配,欢迎⼤家按照使⽤教程体验:
    https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm/npu/llama
    。我们的技术⼯作包括:

    ▎融合算⼦

    融合算⼦通过将多个操作合并为⼀个操作来有效减少内存访问,提升训练效率。FlashAttention 算⼦优化:昇腾⽀持 FlashAttention2优化算法的融合算⼦,计算精度⽀持 FP16、BF16,sequence length ⽀持最⼤8k。在昇腾亲和的 Shape 配置下,Flash Attention 计算的硬件利⽤率可以得到有效提升。Sparse attention:FlashAttention 融合算⼦参数使能 Sparseattention 计算,有效减少50%+的 QK 计算量。除此之外,当前飞桨+昇腾⽬前⽀持融合算⼦主要包括:RMSNorm、Swiglu、RotaryMul、ApplyAdamW 等;累计性能收益可达20%~30%。

    ▎数据类型适配

    不同的数据类型可能会对性能产⽣显著影响,当昇腾使⽤ double 数据类型时,算⼦会通过 AICPU 来执⾏,⽽这可能会导致性能⼤幅度下降,如下图所示。为了避免类似情况引⼊的性能问题难以发现,我们在昇腾适配层代码加⼊告警,以便于问题定位。

    AICPU 算子优化前

    AICPU 算子优化后

    ▎计算与通信并⾏

    在开启了 TP 和 SP 的⼤模型训练场景下,存在matmul计算和all-reduce操作的强依赖关系(不开启 SP),或存在 matmul 计算和 all_gather/reduce_scatter 操作的强依赖关系(开启 SP)。当模型参数量较⼤时,此处通信量和计算量都较⼤,在串⾏执⾏时,会引⼊较长的等待闲置时间。解决⽅案:将 matmul 计算和集合通信操作进⾏融合,将较⼤的计算和通信任务切分成较⼩的计算⼦任务和通信⼦任务,通过流⽔的⽅式使得通信⼦任务和计算⼦任务可以互相掩盖,从⽽减少等待和闲置时间,提⾼利⽤率。

    原始计算图vs切分后的更细粒度的计算图 & 执行过程模拟对比

    ▎profile ⼯具

    昇腾与飞桨共建了 profile ⼯具,能够⽅便地⽣成性能分析数据。

    (详细代码请进入百度AI公众号内同篇文章查看)

    接下来使⽤ msprof ⼯具输出分析结果。

    (详细代码请进入百度AI公众号内同篇文章查看)

    在昇腾硬件上采集 profiling 信息

    05

    产业优势

    总的来说,飞桨新⼀代框架——飞桨框架3.0-beta 昇腾版⾯向⼤模型进⾏专属设计,向下与昇腾硬件适配,充分释放昇腾硬件潜能;向上⼀体化⽀撑⼤模型的训练、推理。同时具有动静统⼀⾃动并⾏、⼤模型训推⼀体、⼤模型昇腾硬件适配三⼤能⼒,全⾯提升了服务产业的能⼒。

  • 动静统⼀⾃动并⾏:这⼀功能⼤幅度降低了产业开发和训练的成本。用户只需在单卡基础上进⾏少量的张量切分标记,飞桨框架便会自动完成分布式切分信息的推导,并添加通信算⼦以确保逻辑的正确性。同时,根据模型结构和集群信息,结合显存和调度层的优化,飞桨能自动寻找最⾼效的分布式并行策略,从⽽大幅降低混合并⾏训练的开发成本,使开发者能够更专注于模型和算法的创新。

  • ⼤模型训推⼀体:这⼀特性为产业提供了极致的开发体验。它使训练和推理的能⼒能够相互复⽤,为⼤模型的全流程提供了统⼀的开发体验和极致的训 练效率。通过动转静的⼯作,训练和推理的⼯作得以⽆缝衔接。可以在训练过程中⽣成计算复⽤推理优化,也可以在推理量化场景复⽤训练的分布式⾃动并⾏策略,提升效率。

  • ⼤模型昇腾适配:飞桨适配昇腾硬件并充分释放昇腾硬件潜能。在接⼊机制上,飞桨提供了简洁⾼效的抽象接⼝和基础算⼦体系,降低了昇腾适配成本。在运⾏机制上,它优化了调度编排和存储共享等机制,提升了调度效率。同时,飞桨还与昇腾深度合作,建设了代码合⼊、持续集成、模型回归测 试等研发基础设施。这些机制保障了昇腾硬件被纳⼊飞桨的正常发版体系中,⽤户⽆需编译即可直接安装试⽤。

  • 这就是飞桨的新⼀代框架——飞桨框架3.0-beta 昇腾版,⽬前此版本已⾯向开发者开放,并且所有的开发接⼝跟2.0完全兼容,欢迎⼴⼤开发者使⽤和反馈。

    (详细代码请进入百度AI公众号内同篇文章查看)

    ▎官⽅开放课程

    7⽉⾄10⽉特设【飞桨框架3.0全⾯解析】直播课程,邀请百度飞桨核⼼团队数⼗位⼯程师倾囊相授,内容包括技术解析加代码实战,带⼤家掌握包括核⼼框架、分布式计算、产业级⼤模型套件及低代码⼯具、前沿科学计算技术案例等多个⽅⾯的框架技术及⼤模型训推优化经验。

    ▎飞桨动态早知道

    为了让优秀的飞桨开发者们掌握第⼀⼿技术动态、让企业落地更加⾼效,根据⼤家的呼声安排史上最强飞桨技术⼤餐!涵盖飞桨框架3.0、低代码开发⼯具 PaddleX、⼤语⾔模型开发套件 PaddleNLP、多模态⼤模型开发套件 PaddleMIX、典型产业场景下硬件适配技术等多个⽅向,⼀起来看吧!

    温馨提示:以上仅为当前筹备中的部分课程,如有变动,敬请谅解。

    ▎拓展阅读

    【3.0视频教程】

    https://aistudio.baidu.com/course/introduce/31815

    【3.0官⽅⽂档】

    https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/paddle_v3_features/index_cn.html

    【开始使⽤】

    https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/paddle_v3_features/overview_cn.html#jiukaishishiyong

    【动转静 SOT 原理及使⽤】

    https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/paddle_v3_features/sot_cn.html

    【⾃动并⾏训练】

    https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/paddle_v3_features/auto_parallel_cn.html

    【神经⽹络编译器】

    https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/paddle_v3_features/cinn_cn.html

    【⾼阶⾃动微分功能】

    https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/paddle_v3_features/higher_order_ad_cn.html

    【PIR 基本概念和开发】

    https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/paddle_v3_features/paddle_ir_cn.html

    【⻜桨官⽹】

    https://www.paddlepaddle.org.cn/