當前位置: 華文世界 > 科技

飛槳新一代框架3.0:新特性構築大模型時代核心生產力

2024-07-25科技

深度學習框架作為基礎軟件,不僅促進了深度學習技術的飛速進步,更為人工智能技術的廣泛套用鋪設了堅實的基礎。

深度學習框架為開發者提供了便捷易用的開發介面,這些介面對數據和操作進行了高度抽象,使得開發者能夠更專註於演算法和模型的設計,而不必深陷底層數據的處理細節。透過這些介面,開發者無需直接感知和應對復雜的硬件底層開發細節,從而極大地提升了開發效率和體驗。其次深度學習框架還提供了自動微分這一強大功能,開發者通常只需要編寫前向傳播網絡的程式碼,而繁瑣的反向傳播網絡則交由框架自動完成。

飛槳作為中國首個自主研發、功能豐富、開源開放的深度學習平台,從預設使用靜態圖的1.0版本,到預設采用動態圖並可實作動靜統一與訓推一體的2.0版本釋出,飛槳框架已經可以完美融合動態圖的靈活性與靜態圖的高效性,並支持模型的混合並列訓練;再到近日, 為大模型時代而錘煉的3.0版本的正式出爐!飛槳正式開啟了新一代框架技術創新之路!

01

設計思想

深度學習框架的設計對於推動人工智能技術的發展至關重要,其 核心設計目標是讓深度學習技術的創新與套用更簡單

如何做到這一點呢?

框架需要充分考慮開發者和硬件廠商的需求。

從使用者角度出發,一個優秀的深度學習框架應當為開發者提供極致的開發體驗。 這不僅僅意味著提供一個使用者友好的開發環境,更重要的是要能夠大振幅減少開發者的學習成本和時間成本,同時顯著提升開發的便利性。為此,飛槳框架提出了「動靜統一、訓推一體、自動並列」的理念,極大地提高了開發效率。

從硬件適配角度出發,現代深度學習套用往往需要在多樣化的硬件平台上執行,因此,框架必須能夠相容並適配各種不同的硬件器材。 這要求框架能夠智能地隔離不同硬件介面之間的差異,實作廣泛的硬件適配性。同時,為了充分發揮硬件的效能,框架還需要具備軟硬件協同工作的能力,確保在利用硬件資源時能夠達到最優的效能表現。

與此同時, 好的框架還需要考慮到 AI 技術發展的整體趨勢、產業的實際落地套用的需求。

技術發展層面 ,大語言模型(Large Language Model,簡稱LLM)、 MOE(Mixture of Experts)、多模態以及科學智能( AI for Science )等前沿技術逐漸成為新的研究熱點。隨著模型復雜性的增加,計算瓶頸、儲存瓶頸、訪存瓶頸以及通訊瓶頸等問題逐漸凸顯,對分布式訓練和通用效能最佳化的需求日益迫切。

在產業化層面 ,框架又需要具備支持訓練、壓縮、推理一體化的全流程能力。這意味著,從模型的訓練到最佳化,再到實際部署和推理,框架應當提供一套完整、高效的解決方案,才能滿足產業界對於深度學習技術的實際需求。

只有跟得上趨勢、經得住打磨的框架,才能為產學研各界開發者提供持續穩定的支持。

飛槳框架3.0的設計理念和主要特色

綜上需求,飛槳將為開發者提供一個「動靜統一、訓推一體、自動並列、自動最佳化、廣泛硬件適配」的深度學習框架,開發者可以像寫單機程式碼一樣寫分布式程式碼,無需感知復雜的通訊和排程邏輯,即可實作大模型的開發;可以像寫數學公式一樣用 Python 語言寫神經網絡,無需使用硬件開發語言編寫復雜的算子內核程式碼,即可實作高效執行。

飛槳框架 3.0 版本應運而生 ,延續了2.x 版本動靜統一、訓推一體的設計理念,其開發介面全面相容2.x 版本。這意味著,使用2.x 版本開發的程式碼,在絕大多數情況下無需修改,即可直接在3.0版本上執行。 著重推出了動靜統一自動並列、編譯器自動最佳化、大模型訓推一體、大模型多硬件適配四大新特性。 這些特性在飛槳框架2.6版本或更早版本時就已經開始開發,目前已達到外部可試用的階段。這些新特性在使用體驗、效能、二次開發便利度以及硬件適配能力等方面帶來了顯著提升,飛槳正式釋出3.0版本。此版本包含了對框架2.x 版本部份已有功能的改進,並且在不使用新特性的情況下,表現成熟穩定。

02

框架架構一覽

為了實作深度學習框架的上述特性,必須對框架的架構進行精心設計,確保其能夠支持各種復雜的模型構建,同時與多樣化的芯片實作無縫對接。接下來,將 透過直觀的架構圖,詳細展示飛槳新一代框架內所涵蓋的功能模組,以及這些模組之間的相互作用與聯系 。以下為飛槳框架3.0的架構圖。

飛槳框架 3.0 架構圖

豐富介面: 飛槳框架對外提供了豐富的深度學習相關的各種開發介面,如張量表示、數學計算、模型組網、最佳化策略等。透過這些介面,開發者能夠便捷地構建和訓練自己的深度學習模型,無需深入到底層的技術細節中去。

在開發介面之下,飛槳框架可以劃分為4個層次:表示層、排程層、算子層和適配層。

  • 表示層:專註於計算圖的表達與轉換,透過高可延伸中間表示 PIR,為動轉靜(動態圖轉為靜態圖)、自動微分、自動並列、算子組合以及計算圖最佳化等核心功能提供堅實支撐。

  • 排程層:負責對程式碼或計算圖進行智能編排與高效排程,並且能夠根據實際需求進行視訊記憶體和記憶體的管理最佳化,支持動態圖和靜態圖高效執行。無論開發者選擇使用動態圖還是靜態圖進行模型開發,飛槳框架都能提供高效的執行環境,同時確保資源利用的最佳化。

  • 算子層:由神經網絡編譯器 CINN 和算子庫 PHI 共同構成,涵蓋了張量定義、算子定義、算子自動融合和算子內核實作等關鍵功能。

  • 適配層:則用於實作與底層芯片適配,包括器材管理、算子適配、通訊適配以及編譯接入等功能。

  • 下面將重點介紹飛槳3.0版本架構全新重大升級,這次升級主要包含以下模組:

    1)高擴充套件中間表示 PIR,透過打造全架構統一的中間表示,突破框架層各模組壁壘,提升飛槳在科學計算、編譯最佳化、大模型領域的潛力;

    2)神經網絡編譯器自動最佳化,透過自動融合和策略調優,大幅提升模型端到端表現;

    3)自動並列,降低大模型場景模型開發和效能最佳化的成本,大幅提升大模型場景的使用者體驗。

    03

    高擴充套件中間表示 PIR

    計算圖中間表示(Intermediate Representation,即 IR)是深度學習框架效能最佳化、推理部署、編譯器等方向的重要基石。近些年來,越來越多的框架和研究者將編譯器技術引入到深度學習的神經網絡模型最佳化中,並在此基礎上借助編譯器的理念、技術和工具對神經網絡進行自動最佳化和程式碼生成。在大模型時代,對 IR 在靈活性、擴充套件性、完備性有了更高的要求。

    因此在3.0版本下,飛槳在基礎架構層面規範了中間表示 IR 定義,實作全架構統一表示,實作上下遊各個方向共享開發成果。飛槳的新一代 IR 架構聚焦於高度靈活和高擴充套件性兩個重要維度,透過更加完備且魯棒的語意表達能力、訓推全架構統一表示和高效可插拔的效能最佳化策略(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的細節。 利用 PIR 的 Pass 開發機制,實作了 Pass 開發成本降低58%;套用於推理場景,超過84%的模型推理加速超10%

    04

    神經網絡編譯器自動最佳化

    為什麽我們要研發編譯器技術,有3個維度的原因:

    1)硬件發展趨勢:結合硬件發展歷史和技術演進特點,算力發展速度遠大於訪存效能、CPU 效能和總線頻寬;其中訪存效能影響訪存密集型算子(norm 類,activation 等)效能,CPU 效能和總線頻寬影響排程效能。基於編譯器的自動融合的通用最佳化技術,可以將多個算子融合成一個大算子,透過減少訪存量和算子數量,能夠大幅提升模型效能,編譯器技術會成為深度學習框架標配元件。

    2)模型發展趨勢:模型結構存在多樣性的特點,多樣性的需求非常依賴編譯器的通用最佳化。

    3)多硬件最佳化:當前市面存在有多款硬件,不同的硬件平台有不同的特性和最佳化需求,每個硬件均需要投入大量的人力進行最佳化,借助編譯器技術,能夠大幅降低這類最佳化技術成本。

    讓我們透過一個例項來闡釋這一點。我們以 Llama 模型中經常使用的 RMS Normalization (Root Mean Square Layer Normalization)為例,其計算公式相對簡單明了。

    假設我們需要是實作 RMS Normalization 的計算,最簡單的辦法是,我們可以使用飛槳框架提供的張量運算開發介面,呼叫平方、求和、除法、開根號等操作來完成,程式碼如下:

    (詳細程式碼請進入百度AI公眾號同篇文章檢視)

    上述程式碼開發簡單,但是效能較差,且視訊記憶體占比較多;開發者可以進行 FusedRMSNorm 的實作,但是對於開發者要求更高,成本也更高。

    借助神經網絡編譯器技術,我們能夠在維持高度靈活性和易用性的基礎上,實作效能的顯著提升。以下 A100平台上 RMSNorm 算子的效能測試結果便是一個明證:相較於采用 Python 開發介面組合實作的方式, 經過編譯最佳化後的算子執行速度提升了 4 倍;即便與手動算子融合的方式相比,也實作了 14%的效能提升 。這一成果充分展示了飛槳框架在靈活性與效能之間尋找到的理想平衡點。

    為此,飛槳把神經網絡編譯器技術作為一個重要的研發方向,下面是飛槳編譯器的整體架構圖。

    在表示層,借助 PIR 的擴充套件能力,實作 CINN 前端模組,處理圖層相關變換,包含算子拆分、重計算、子圖劃分、維度推導模組等模組,最終得到多個可被編譯器後端生成最佳化的子圖。在編譯器後端,對於這些可融合的子圖,編譯器會進一步呼叫Compute 函數,將它們轉換為由抽象語法樹(AST)構成的低層中間表示(IR),並在此基礎上進行迴圈的融合,確保能融合成一個 kernel;在 CINN 底層 IR 上,會進行效能的調優分析,得到最優配置;最後底層 IR 會被進一步精心轉換成具體的程式碼實作。

    在生成式大語言模型 Llama 和文生圖模型 Stable Diffusion 上的實驗結果顯示, 透過使用編譯器的最佳化技術,相較於未采用手動效能最佳化的基礎版本,推理速度分別實作了 36%和 30%的提升。

    05

    動靜統一自動並列

    為什麽我們要做自動並列?

    當前大模型主流訓練方式,會用到多種並列策略,這些並列策略基於動態圖模式實作的「手動」並列方式,即在單卡的基礎上,手工處理切分(切分 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%,從而大大降低了開發的難度 ;從我們的一些實驗可知, 借助全域的分析等最佳化,效能也優於動態圖手動並列的效能

    未來,我們將進一步探索無需使用張量切分標記的全自動並列,讓開發者可以像寫單機程式碼一樣寫分布式程式碼,進一步提升大模型的開發體驗。

    06

    產業優勢

    總的來說,飛槳新一代框架——飛槳框架3.0-Beta 是面向大模型、異構多芯進行專屬設計,向下適配異構多芯,充分釋放硬件潛能;向上一體化支撐大模型的訓練、推理。同時具有動靜統一自動並列、編譯器自動最佳化、大模型訓推一體、大模型多硬件適配四大能力,全面地提升了服務產業的能力。

  • 動靜統一自動並列: 這一功能大振幅降低了產業開發和訓練的成本。使用者只需在單卡基礎上進行少量的張量切分標記,飛槳框架便會自動完成分布式切分資訊的推導,並添加通訊算子以確保邏輯的正確性。同時,根據模型結構和集群資訊,結合視訊記憶體和排程層的最佳化,飛槳能自動尋找最高效的分布式並列策略,從而大幅降低混合並列訓練的開發成本,使開發者能夠更專註於模型和演算法的創新。

  • 編譯器自動最佳化: 這一功能顯著降低了效能最佳化的成本。飛槳的編譯器采用與框架一體化的設計,能夠支持生成式模型、科學計算模型等多種模型的高效訓練與可變形狀推理,為計算靈活性與高效能之間提供了良好的平衡點。透過算子的自動融合和程式碼生成技術,Llama2和 Stable Diffusion 等生成式模型的推理效能得到了超過30%的提升。

  • 大模型訓推一體: 這一特性為產業提供了極致的開發體驗。它使訓練和推理的能力能夠相互復用,為大模型的全流程提供了統一的開發體驗和極致的訓練效率。透過動轉靜的工作,訓練和推理的工作得以無縫銜接。在 RLHF(人類反饋強化學習)訓練過程中的生成計算可以復用推理最佳化,實作2.1倍的加速。同時,推理量化場景復用訓練的分布式自動並列策略,效率提升了3.8倍。

  • 大模型多硬件適配: 飛槳的重要特色之一是適配異構多芯並充分釋放硬件潛能。在接入機制上,飛槳提供了簡潔高效的抽象介面和基礎算子體系,降低了適配成本。在執行機制上,它最佳化了排程編排和儲存共享等機制,提升了排程效率。從算子內核角度,飛槳提供了編譯器自動融合調優方案,以提升端到端的效能。同時,飛槳還為新硬件廠商建設了程式碼合入、持續整合、模型回歸測試等研發基礎設施。這些機制保障了新硬件被納入飛槳的正常發版體系中,使用者無需編譯即可直接安裝試用。飛槳這種功能完善、低成本接入的機制吸引了硬件廠商共同為飛槳貢獻了3,456個PR,共包含25,000多個 commits。

  • 這就是飛槳的新一代框架 3.0 ,目前3.0-Beta 版本已面向開發者開放,並且所有的開發介面跟2.0完全相容,非常歡迎廣大的開發者去使用和反饋。

    ▎官方開放課程

    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/