如何加速大模型開發?技術方案拆解來了:昇思MindSpore技術一覽

量子位 發佈 2024-05-10T04:33:30.138492+00:00

隨著ChatGPT爆火出圈,狂飆之勢從22年底持續到23年初,與以往的技術突破不同的是,此次的大模型不僅被技術界關注,而且備受投資界、產業界和大眾消費者的追捧,使它成為歷史上最快月活過億的現象級應用,繼而引發全球科技巨頭的AI競賽。

隨著ChatGPT爆火出圈,狂飆之勢從22年底持續到23年初,與以往的技術突破不同的是,此次的大模型不僅被技術界關注,而且備受投資界、產業界和大眾消費者的追捧,使它成為歷史上最快月活過億的現象級應用,繼而引發全球科技巨頭的AI競賽。

大模型的高智能化離不開對模型的大規模預訓練,這背後需要強大的AI框架作底層支持。面對動輒千億級參數的大模型,如何使能廣大開發者和用戶進行開發,在當前大模型研究分秒必爭之時彎道超車?且讓我們順著大模型技術的方案拆解,一探昇思MindSpore AI框架的技術能力。

預訓練大模型的開發之路

大規模預訓練——GPT3與鵬程.盤古

2020年,OpenAI祭出了遠超同期所有預訓練模型的大殺器GPT3。憑藉著1750億參數量,300B Token的預訓練,GPT3展現出非常強悍的自然語言處理能力,包括:

  • 文本生成:根據Prompt來續寫(補全)句子。
  • 上下文學習(In-context Learning): 遵循給定任務的幾個示例,然後為新的測試用例生成解決方案。
  • 世界知識(World Knowledge): 包括事實性知識和常識。

此時與GPT3同量級的大規模預訓練語言模型仍是國內外難以逾越的大山。2021年4月,基於昇思MindSpore AI框架的多維度自動混合併行能力,以鵬城實驗室為首的聯合科研團隊在大規模AI算力平台鵬城雲腦II上,訓練出業界首個2000億參數、以中文為核心的預訓練生成語言模型鵬程.盤古。聯合團隊從開源開放數據集、common crawl網頁數據、電子書等收集了近80TB原始數據,搭建了面向大型語料庫預處理的分布式集群,通過數據清洗過濾、去重、質量評估等處理流程,構建了一個約1.1TB大小的高質量中文語料數據集,經統計Token數量約為250B規模。

憑藉著與GPT3相同量級的參數量,鵬程.盤古預訓練模型擁有不遜於GPT3的上下文學習和世界知識能力。

△圖1 鵬程.盤古模型架構

利用昇思MindSpore AI框架的自動並行能力,開發者只需一行代碼就能實現模型自動切分、分布式並行計算,省卻大量複雜設計,在大集群上高效訓練千億至萬億參數模型。關於昇思MindSpore的自動並行能力,這裡先按下不表,讓我們繼續看下一個技術要素。

思維鏈的必經之路——Code預訓練

思維鏈(Chain of Thoughs,即鏈式思維推理)是大模型能夠擁有擬人化對話能力的關鍵。在GPT3之後,思維鏈能力開始被認為是通過few shot learning進行激發,後續有「lets think step by step」的zero shot prompt進一步觸發了該能力。但是此時的大模型仍舊僅限於在各類數據集上呈現弱思維鏈能力。

直到代碼數據的預訓練模型出現並融入到自然語言預訓練模型中,大模型的思維連結能力躍上新的台階。下圖是OpenAI從GPT3以來的演進路線圖。左側的分支是代碼大模型的持續演進,一直到code-davinci-002將LM和Code訓練進行融合,再加入instruct tuning,最終催生出耳熟能詳的ChatGPT。

△圖2 ChatGPT演進路線

2022年9月,清華大學團隊基於昇思MindSpore 1.7研發了CodeGeeX代碼預訓練大模型,並使用鵬城實驗室的大規模AI算力平台(鵬城雲腦II)進行訓練。CodeGeeX的訓練語料由兩部分組成:第一部分是開原始碼數據集,The Pile與CodeParrot;第二部分是補充數據,直接從GitHub開源倉庫中爬取Python、Java、C++代碼。整個代碼語料含有23種程式語言、總計1587億個標識符(不含填充符)。

在開發與訓練過程中,清華大學與昇思MindSpore團隊深度合作,實現了一系列算子融合優化,包括單元素算子融合、層歸一化算子融合、FastGelu與矩陣乘法融合、批量矩陣乘法與加法融合等, 為訓練速度帶來了顯著提升。

撬動人類的智慧——RLHF與PPO

ChatGPT令人震驚的能力在於其能夠真正擬人化地進行對話,生成內容更加符合人類的認知和價值觀。在大模型已經具備充足的世界知識、上下文學習能力和思維鏈能力的情況下,雖然可以在各大NLP數據集持續刷榜,但是仍舊存在一個問題——與人類的表達習慣差異巨大。而ChatGPT的前身InstructGPT,向我們展示了人類反饋加入模型訓練的循環當中,所能呈現的巨大改變,那就是RLHF(Reinforcement Learning from Human Feedback,即使用人類反饋強化學習)。

RLHF技術主要分為如下4個步驟:

1) 無監督預訓練: 預訓練一個語言模型如GPT-3。

2) 有監督的微調:生成一組Prompt,以及對每個Prompt的人類反饋。即一個由對組成的訓練數據集。然後對預訓練的模型進行微調。

3) 訓練「人類反饋」的獎勵模型:建立一個獎勵模型,對預訓練語言模型輸出進行評分。首先給定一組Prompt,機器生成對這些指令的Answer,並由人類對其質量進行評分或排名。使用這個數據集來訓練一個獎勵模型,為任何對輸出一個質量分數。

4) 訓練一個基於獎勵模型進行優化的強化學習策略。

下圖是RLHF的核心PPO算法的示意圖:

△圖3 PPO算法邏輯

針對RLHF所需的強化學習算法,昇思MindSpore進行了布局,發布MindSpore Reinforcement Learning套件,為編寫強化學習算法提供了簡潔的API抽象,將算法與部署和調度解耦;將強化學習算法轉換為一系列編譯後的計算圖,然後由昇思MindSpore AI框架在昇騰AI處理器、CPU、GPU上高效運行。目前MindSpore Reinforcement Learning套件提供下述能力:

1) 提供豐富的強化學習算法:當前已支持15+經典強化學習算法,涵蓋Model-free/Model-based/Offline-RL/Imitation Learning,單智能體/多智能體,連續/離散動作空間,Episodic/Non-Episodic等算法;接入Mujoco、MPE、StarCraft2、DeepMind Control等常用模擬環境。

2) 專注高性能訓練:通過計算圖和ReplayBuffer加速、異步環境並行和高性能領域組件,已支持算法的平均吞吐率相比主流框架提升120%。

3) 支持大規模分式訓練:通過將強化學習算法分割成多個數據流片段(Fragmented Dataflow Graphs),並映射到異構設備上高效執行,對比業界主流框架實現了3~5倍的性能提升。

昇思MindSpore使能大模型歷程

隨著AI技術的發展,預訓練大模型成為世界各科技強國競爭的焦點。預訓練大模型率先在自然語言處理領域取得突破性的進展,並迅速拓展到涉及圖像、視頻、圖形、語言等跨媒體推理的各類任務和大量的商業應用之中,展現了巨大的發展潛力。在過去的幾年,產業界基於昇思MindSpore先後發布了一系列有影響力的大模型,下圖為這些大模型的訓練時間軸。

△圖4 昇思MindSpore大模型歷程

上圖模型結構涉及Transformer Encoder、Transformer Decoder、MOE、乃至Clip與Diffusion,均基於昇思MindSpore AI框架訓練。

昇思MindSpore具備豐富的並行能力,能輕鬆完成4096卡集群、萬億參數規模的訓練任務,因此支撐了國內多個領域首發大模型的訓練,這些大模型涉及知識問答、知識檢索、知識推理、閱讀理解、文本/視覺/語音多模態、生物製藥、遙感、代碼生成等。

大模型的底座——昇思MindSpore的分布式並行能力

在梳理完ChatGPT的技術方案和昇思MindSpore的大模型歷程之後,我們再深入展開昇思MindSpore AI框架支撐一眾大模型的核心——分布式並行能力。

分布式訓練

昇思MindSpore支持當前主流的分布式訓練範式並開發了一套自動混合併行解決方案,提供以下關鍵技術:

1)數據切片預處理:對訓練數據進行任意維度切片後再導入到設備進行訓練;

2)算子級並行:對正向網絡中的每個算子都獨立建模,每個算子可以擁有不同的切分策略;

3)優化器並行:將數據並行的參數副本切分到多個設備上,以節省內存占用;

4)Pipeline並行:將神經網絡中的計算圖切分成多個階段(Stage),再把階段映射到不同的設備上,使得不同設備去計算神經網絡的不同部分;

5)MOE並行:為每個專家分配專門的計算任務,不同的專家可以託管在不同的設備上;

6)多副本並行:在一個疊代步驟中,將一個訓練batch拆分成多個micro-batch,將模型並行通信與計算進行並發;

7)異構並行:將算子分配到異構硬體上執行,充分利用硬體資源,提升整體訓練吞吐量;

8)正向重計算:在正向計算時,不保存占用大量內存的中間輸出結果,而是保存占用少量內存的輸入;而在反向計算時,根據輸入重新計算正向輸出,從而大大削減正向計算累積的內存峰值;

9)全局內存復用:對計算圖進行靜態編譯尋優得到最優內存復用策略;

相較於業界的深度學習框架或分布式並行框架,昇思MindSpore在分布式關鍵技術上,支持能力範圍廣、自動化程度高、易用性好,具備如下優勢:

1)支持的模型類型更豐富(Transformer、超分圖像、推薦等),通用性更強,而像業界Megatron框架則是面向Transformer定製的框架;

2)相同算力和網絡下,豐富的並行策略可實現更大的計算通信比,性能更優(相同硬體平台(V100、A100),性能超越Megatron 15%);

3)並行策略豐富,無需手動切分,大模型開發和調優效率優於業界;

分布式推理

相較於訓練,推理對計算性能的要求更高。如何在集群上實現高效快速的大模型推理,是目前各種框架研究的一個重點和難點。為了解決上述問題,昇思MindSpore提出了分布式推理+增量推理的解決方案,使用數據並行、模型並行、流水並行等多維度混合併在大集群上面進行推理。此外,由於Transformer Decoder類自回歸語言模型,在傳統的推理模式下存在很多重複計算,昇思MindSpore提供的增量推理能力能夠省掉這些重複計算,增強推理效率。

△圖5 增量推理流程圖

如上圖所示,第一階段將使用完整輸入推理,保存當前字(詞)對應的向量。在第二階段,輸入僅為上一步推理得到的字(詞),然後將本步推理得到的向量與保存下來的前序向量拼接,作為本步推理的完整向量,得到本步的輸出字(詞)。重複以上兩個階段。

極簡易用的大模型訓練——大模型套件

在現有的大模型開發過程中,用戶經常會發現SOTA基礎模型代碼非模塊化從而影響進一步的創新開發。不僅如此,用戶在模型實現中,經常找不到對應的SOTA模型以及相應的下游任務,從而加長了開發周期,影響論文或項目的進度。為了解決這些痛點,基於昇思MindSpore的大模型套件——MindSpore Transformers應聲而出。

MindSpore Transformers是基於昇思MindSpore的深度學習大模型開發套件,其目標是構建一個大模型訓練、微調、評估、推理、部署的全流程開發套件。套件覆蓋了CV、NLP等AIGC的熱門領域,提供模型生命周期中的全流程快速開發能力,支持開箱即用,並具有四個特點:

  • MindSpore Transformers中提供了非常豐富的預置模型,包含了當下典型的預訓練大模型(Bert、T5、VIT等),涵蓋當下CV、NLP等AIGC的熱門領域。同時,套件也包含了豐富的下游微調任務,精度與SOTA基本持平。
  • MindSpore Transformers中提供了統一的開發範式。套件開放了Trainer、pipeline等特性接口,實現模塊化、配置化的開發,大大提高典型模型(尤其是基於transformer結構的網絡)的開發效率。模型部署方面, 套件支持昇騰AI基礎軟硬體平台,提供了一鍵雲上部署接口。
  • MindSpore Transformers提供了統一的對外接口。在現有版本中,套件和業界流行的Huggingface 接口保持一致,用戶可以一鍵切換,從而極大地降低代碼遷移的成本。
  • MindSpore Transformers套件天然包含昇思MindSpore AI框架自身優勢,包含多維度並行(模型並行、流水線並行、優化器並行、多副本並行等)、圖算融合等能力,可以在模型訓練時有效地提升內存使用效率和速度,幫助用戶快速訓練百億、千億甚至是萬億級別的模型。

△圖6 MindSpore Transformers 架構圖

通過以上技術拆解和案例可以看出,昇思MindSpore發展至今,已經具備了支持大模型開發所需的各項核心技術,同時提供了一整套高效、易用的大模型使能套件,形成了端到端的使能大模型開發能力。昇思MindSpore AI框架為助力大模型創新、繁榮AI產業生態鋪就了一條信心之路。

△圖7 昇思MindSpore原生支持大模型的能力優勢

歡迎使用昇思MindSporeAI框架:
https://mindspore.cn/
https://gitee.com/mindspore/mindformers

引用:
[1]Zeng W, Ren X, Su T, et al. Large-scale Autoregressive Pretrained Chinese Language Models with Auto-parallel Computation[J]. arXiv preprint arXiv:2104.12369
[2]https://yaofu.notion.site/GPT-3-5-360081d91ec245f29029d37b54573756
[3]https://huggingface.co/blog/rlhf
[4] https://aijishu.com/a/1060000000222564
[5]https://gitee.com/mindspore/mindformers/wikis/%E7%89%B9%E6%80%A7%E8%AE%BE%E8%AE%A1%E6%96%87%E6%A1%A3

關鍵字: