隨著ChatGPT的迅速出圈,加速了大模型時代的變革。對于以Transformer、MOE結構為代表的大模型來說,傳統的單機單卡訓練模式肯定不能滿足上千(萬)億級參數的模型訓練,這時候我們就需要解決內存墻和通信墻等一系列問題,在單機多卡或者多機多卡進行模型訓練。
最近一段時間,我也在探索大模型相關的一些技術,下面做一個簡單的總結。
大模型實踐文章
下面是最近大模型實踐過程中的一些文章,配套代碼放置在GitHub:llm-action
LLM訓練:
LLM | 預訓練/微調/RLHF... | 參數 | 教程 | 代碼 |
---|---|---|---|---|
Alpaca | full fine-turning | 7B | 從0到1復現斯坦福羊駝(Stanford Alpaca 7B) | N/A |
Alpaca | lora | 7B | 1. 足夠驚艷,使用Alpaca-Lora基于LLaMA(7B)二十分鐘完成微調,效果比肩斯坦福羊駝 2. 使用 LoRA 技術對 LLaMA 65B 大模型進行微調及推理 |
配套代碼 |
BELLE(LLaMA-7B/Bloomz-7B1-mt) | full fine-turning | 7B | 1. 基于LLaMA-7B/Bloomz-7B1-mt復現開源中文對話大模型BELLE及GPTQ量化 2. BELLE(LLaMA-7B/Bloomz-7B1-mt)大模型使用GPTQ量化后推理性能測試 |
N/A |
ChatGLM | lora | 6B | 從0到1基于ChatGLM-6B使用LoRA進行參數高效微調 | N/A |
ChatGLM | full fine-turning/P-Tuning v2 | 6B | 使用DeepSpeed/P-Tuning v2對ChatGLM-6B進行微調 | N/A |
Vicuna | full fine-turning | 7B | 大模型也內卷,Vicuna訓練及推理指南,效果碾壓斯坦福羊駝 | N/A |
OPT | RLHF | N/A | 1. 一鍵式 RLHF 訓練 DeepSpeed Chat(一):理論篇 2. 一鍵式 RLHF 訓練 DeepSpeed Chat(二):實踐篇 |
N/A |
MiniGPT-4 | full fine-turning | 7B | 大殺器,多模態大模型MiniGPT-4入坑指南 | N/A |
Chinese-LLaMA-Alpaca | lora(預訓練+微調) | 7B | 使用 LoRA 技術對 LLaMA 65B 大模型進行微調及推理 | 配套代碼 |
LLM推理:
- 大模型的好伙伴,淺析推理加速引擎FasterTransformer
- 模型推理服務化框架Triton保姆式教程(一):快速入門
- 模型推理服務化框架Triton保姆式教程(二):架構解析
- 模型推理服務化框架Triton保姆式教程(三):開發實踐
LLM微調技術:
對于普通大眾來說,進行大模型的預訓練或者全量微調遙不可及。由此,催生了各種參數高效微調技術,讓科研人員或者普通開發者有機會嘗試微調大模型。
因此,該技術值得我們進行深入分析其背后的機理,本系列大體分七篇文章進行講解。
- 大模型參數高效微調技術原理綜述(一)-背景、參數高效微調簡介
- 大模型參數高效微調技術原理綜述(二)-BitFit、Prefix Tuning、Prompt Tuning
- 大模型參數高效微調技術原理綜述(三)-P-Tuning、P-Tuning v2
- 大模型參數高效微調技術原理綜述(四)-Adapter Tuning及其變體
- 大模型參數高效微調技術原理綜述(五)-LoRA、AdaLoRA、QLoRA
- 大模型參數高效微調技術原理綜述(六)-MAM Adapter、UniPELT
- 大模型參數高效微調技術原理綜述(七)-最佳實踐、總結
GPU集群
由于目前只有3臺A800 GPU服務器(共24卡)。基于目前現有的一些AI框架和大模型,無法充分利用3臺服務器。比如:OPT-66B一共有64層Transformer,當使用Alpa進行流水線并行時,通過流水線并行對模型進行切分,要么使用16卡,要么使用8卡,沒法直接使用24卡,因此,GPU服務器最好是購買偶數臺(如:2臺、4臺、8臺)。
具體的硬件配置如下:
- CPUs: 每個節點具有 1TB 內存的 Intel CPU,物理CPU個數為64,每顆CPU核數為16。
- GPUs: 24 卡 A800 80GB GPUs ,每個節點 8 個 GPU(3 個節點)。
目前使用Huggingface Transformers和DeepSpeed進行通過數據并行進行訓練(pretrain),單卡可以跑三百億參數(啟用ZeRO-2或ZeRO-3),如OPT-30B,具體訓練教程參考官方樣例。
使用Alpa進行流水線并行和數據并行進行訓練(fine tuning)時,使用了3臺共24卡(PP:12,DP:2)進行訓練OPT-30B,具體訓練教程參考官方樣例。但是進行模型訓練之前需要先進行模型格式轉換,將HF格式轉換為Alpa格式的模型文件,具體請參考官方代碼。如果不想轉換,官網也提供了轉換好的模型格式,具體請參考文檔:Serving OPT-175B, BLOOM-176B and CodeGen-16B using Alpa。
[圖片上傳失敗...(image-f17581-1686831126733)]
大模型算法
模型結構:
目前主流的大模型都是Transformer、MOE結構為基礎進行構建,如果說Transformer結構使得模型突破到上億參數量,MoE 稀疏混合專家結構使模型參數量產生進一步突破,達到數萬億規模。
大模型算法:
下圖詳細展示了AI大模型的發展歷程:
[圖片上傳失敗...(image-3b8688-1686831126734)]
可以說,Transformer 開創了繼 MLP 、CNN和 RNN之后的第四大類模型。而基于Transformer結構的模型又可以分為Encoder-only、Decoder-only、Encoder-Decoder這三類。
- 僅編碼器架構(Encoder-only):自編碼模型(破壞一個句子,然后讓模型去預測或填補),更擅長理解類的任務,例如:文本分類、實體識別、關鍵信息抽取等。典型代表有:Bert、RoBERTa等。
- 僅解碼器架構(Decoder-only):自回歸模型(將解碼器自己當前步的輸出加入下一步的輸入,解碼器融合所有已經輸入的向量來輸出下一個向量,所以越往后的輸出考慮了更多輸入),更擅長生成類的任務,例如:文本生成。典型代表有:GPT系列、LLaMA、OPT、Bloom等。
- 編碼器-解碼器架構(Encoder-Decoder):序列到序列模型(編碼器的輸出作為解碼器的輸入),主要用于基于條件的生成任務,例如:翻譯,概要等。典型代表有:T5、BART、GLM等。
大語言模型
目前業界可以下載到的一些大語言模型:
- ChatGLM-6B :中英雙語的對話語言模型。
- GLM-10B/130B :雙語(中文和英文)雙向稠密模型。
- OPT-2.7B/13B/30B/66B :Meta開源的預訓練語言模型。
- LLaMA-7B/13B/30B/65B :Meta開源的基礎大語言模型。
- Alpaca(LLaMA-7B):斯坦福提出的一個強大的可復現的指令跟隨模型,種子任務都是英語,收集的數據也都是英文,因此訓練出來的模型未對中文優化。
- BELLE(BLOOMZ-7B/LLaMA-7B/LLaMA-13B):本項目基于 Stanford Alpaca,針對中文做了優化,模型調優僅使用由ChatGPT生產的數據(不包含任何其他數據)。
- Bloom-7B/13B/176B:可以處理46 種語言,包括法語、漢語、越南語、印度尼西亞語、加泰羅尼亞語、13 種印度語言(如印地語)和 20 種非洲語言。其中,Bloomz系列模型是基于 xP3 數據集微調。 推薦用于英語的提示(prompting);Bloomz-mt系列模型是基于 xP3mt 數據集微調。推薦用于非英語的提示(prompting)。
- Vicuna(7B/13B):由UC Berkeley、CMU、Stanford和 UC San Diego的研究人員創建的 Vicuna-13B,通過在 ShareGPT 收集的用戶共享對話數據中微調 LLaMA 獲得。其中,使用 GPT-4 進行評估,發現 Vicuna-13B 的性能在超過90%的情況下實現了與ChatGPT和Bard相匹敵的能力;同時,在 90% 情況下都優于 LLaMA 和 Alpaca 等其他模型。而訓練 Vicuna-13B 的費用約為 300 美元。不僅如此,它還提供了一個用于訓練、服務和評估基于大語言模型的聊天機器人的開放平臺:FastChat。
- Baize:白澤是在LLaMA上訓練的。目前包括四種英語模型:白澤-7B、13B 、 30B(通用對話模型)以及一個垂直領域的白澤-醫療模型,供研究 / 非商業用途使用,并計劃在未來發布中文的白澤模型。白澤的數據處理、訓練模型、Demo 等全部代碼已經開源。
-
LLMZoo:來自香港中文大學和深圳市大數據研究院團隊推出的一系列大模型,如:Phoenix(鳳凰) 和 Chimera等。
-MOSS:由復旦 NLP 團隊推出的 MOSS 大語言模型。
20230325(當時官方還未開源訓練代碼,目前直接基于官方的訓練代碼即可):
前兩天測試了BELLE,對中文的效果感覺還不錯。具體的模型訓練(預訓練)方法可參考Hugingface Transformers的樣例,SFT(指令精調)方法可參考Alpaca的訓練代碼。
從上面可以看到,開源的大語言模型主要有三大類:GLM衍生的大模型(wenda、ChatSQL等)、LLaMA衍生的大模型(Alpaca、Vicuna、BELLE、Phoenix、Chimera等)、Bloom衍生的大模型(Bloomz、BELLE、Phoenix等)。
模型 | 訓練數據量 | 模型參數 | 訓練數據范圍 | 詞表大小 |
---|---|---|---|---|
LLaMA | 1T~1.4T tokens(其中,7B/13B使用1T,33B/65B使用1.4T) | 7B~65B | 以英語為主要語言的拉丁語系 | 32000 |
ChatGLM-6B | 約 1T tokens | 6B | 中文、英語 | 130528 |
Bloom | 1.6TB預處理文本,轉換為 350B 唯一 tokens | 300M~176B | 46種自然語言,13種編程語言 | 250680 |
從表格中可以看到,對于像ChatGLM-6B、LLaMA、Bloom這類大模型,要保證基座模型有比較好的效果,至少需要保證上千億、萬億級的Token量。
目前來看,LLaMA無疑是其中最閃亮的星。但是國內關于LLaMA比較大的一個爭論就是LLaMA是以英語為主要語言的拉丁語系上進行訓練的,LLaMA詞表中的中文token比較少(只有幾百個),需不需要擴充詞表?如果不擴充詞表,中文效果會不會比較差?
- 如果不擴充詞表,對于中文效果怎么樣?根據Vicuna官方的報告,經過Instruction Turing的Vicuna-13B已經有非常好的中文能力。
- LLaMA需不需要擴充詞表?根據Chinese-LLaMA-Alpaca和BELLE的報告,擴充中文詞表,可以提升中文編解碼效率以及模型的性能。但是擴詞表,相當于從頭初始化開始訓練這些參數。如果想達到比較好的性能,需要比較大的算力和數據量。同時,Chinese-LLaMA-Alpaca也指出在進行第一階段預訓練(凍結transformer參數,僅訓練embedding,在盡量不干擾原模型的情況下適配新增的中文詞向量)時,模型收斂速度較慢。如果不是有特別充裕的時間和計算資源,建議跳過該階段。因此,雖然擴詞表看起來很誘人,但是實際操作起來,還是很有難度的。
下面是BELLE針對是否擴充詞表,數據質量、數據語言分布、數據規模對于模型性能的對比:
[圖片上傳失敗...(image-814abe-1686831126734)]
其中,BELLE-0.5M-CLEAN是從230萬指令數據中清洗得到0.5M數據(包含單輪和多輪對話數據)。LLaMA-7B-EXT是針對LLaMA做了中文詞表擴充的預訓練模型。
下面是Chinese-LLaMA-Alpaca針對中文Alpaca-13B、中文Alpaca-Plus-7B、中文Alpaca-Plus-13B的效果對比:
[圖片上傳失敗...(image-6602ff-1686831126734)]
其中,Plus系列Alpaca是在原版LLaMA的基礎上擴充了中文詞表,使用了120G中文通用純文本數據進行二次預訓練。
因此,如果既想要中文詞表,又沒有很大的算力,那建議直接使用ChatGLM-6B或者使用BELLE和Chinese-LLaMA-Alpaca進行中文詞表擴充后訓練好的模型作為Base模型。
多模態大模型
目前業界可以下載到的一些多模態大模型:
- MiniGPT-4:沙特阿拉伯阿卜杜拉國王科技大學的研究團隊開源。
- LLaVA:由威斯康星大學麥迪遜分校,微軟研究院和哥倫比亞大學共同出品。
- VisualGLM-6B:開源的,支持圖像、中文和英文的多模態對話語言模型,語言模型基于 ChatGLM-6B,具有 62 億參數;圖像部分通過訓練 BLIP2-Qformer 構建起視覺模型與語言模型的橋梁,整體模型共78億參數。
分布式并行及顯存優化技術
并行技術:
- 數據并行(如:PyTorch DDP)
- 模型/張量并行(如:Megatron-LM(1D)、Colossal-AI(2D、2.5D、3D))
- 流水線并行(如:GPipe、PipeDream、PipeDream-2BW、PipeDream Flush(1F1B))
- 多維混合并行(如:3D并行(數據并行、模型并行、流水線并行))
- 自動并行(如:Alpa(自動算子內/算子間并行))
- 優化器相關的并行(如:ZeRO(零冗余優化器,在執行的邏輯上是數據并行,但可以達到模型并行的顯存優化效果)、PyTorch FSDP)
顯存優化技術:
- 重計算(Recomputation):Activation checkpointing(Gradient checkpointing),本質上是一種用時間換空間的策略。
- 卸載(Offload)技術:一種用通信換顯存的方法,簡單來說就是讓模型參數、激活值等在CPU內存和GPU顯存之間左右橫跳。如:ZeRO-Offload、ZeRO-Infinity等。
- 混合精度(BF16/FP16):降低訓練顯存的消耗,還能將訓練速度提升2-4倍。
- BF16 計算時可避免計算溢出,出現Inf case。
- FP16 在輸入數據超過65506 時,計算結果溢出,出現Inf case。
分布式訓練框架
如何選擇一款分布式訓練框架?
- 訓練成本:不同的訓練工具,訓練同樣的大模型,成本是不一樣的。對于大模型,訓練一次動輒上百萬/千萬美元的費用。合適的成本始終是正確的選擇。
- 訓練類型:是否支持數據并行、張量并行、流水線并行、多維混合并行、自動并行等
- 效率:將普通模型訓練代碼變為分布式訓練所需編寫代碼的行數,我們希望越少越好。
- 靈活性:你選擇的框架是否可以跨不同平臺使用?
常見的分布式訓練框架:
- 第一類:深度學習框架自帶的分布式訓練功能。如:TensorFlow、PyTorch、MindSpore、Oneflow、PaddlePaddle等。
- 第二類:基于現有的深度學習框架(如:PyTorch、Flax)進行擴展和優化,從而進行分布式訓練。如:Megatron-LM(張量并行)、DeepSpeed(Zero-DP)、Colossal-AI(高維模型并行,如2D、2.5D、3D)、Alpa(自動并行)等
目前訓練超大規模語言模型主要有兩條技術路線:
- TPU + XLA + TensorFlow/JAX :由Google主導,由于TPU和自家云平臺GCP深度綁定
- GPU + PyTorch + Megatron-LM + DeepSpeed :由NVIDIA、Meta、MicroSoft大廠加持,社區氛圍活躍,也更受到大家歡迎。
參數高效微調(PEFT)技術
在面對特定的下游任務時,如果進行Full FineTuning(即對預訓練模型中的所有參數都進行微調),太過低效;而如果采用固定預訓練模型的某些層,只微調接近下游任務的那幾層參數,又難以達到較好的效果。
PEFT技術旨在通過最小化微調參數的數量和計算復雜度,來提高預訓練模型在新任務上的性能,從而緩解大型預訓練模型的訓練成本。這樣一來,即使計算資源受限,也可以利用預訓練模型的知識來迅速適應新任務,實現高效的遷移學習。因此,PEFT技術可以在提高模型效果的同時,大大縮短模型訓練時間和計算成本,讓更多人能夠參與到深度學習研究中來。
-
Prefix Tuning:與full fine-tuning更新所有參數的方式不同,該方法是在輸入token之前構造一段任務相關的virtual tokens作為Prefix,然后訓練的時候只更新Prefix部分的參數,而Transformer中的其他部分參數固定。該方法其實和構造Prompt類似,只是Prompt是人為構造的“顯式”的提示,并且無法更新參數,而Prefix則是可以學習的“隱式”的提示。
同時,為了防止直接更新Prefix的參數導致訓練不穩定的情況,他們在Prefix層前面加了MLP結構(相當于將Prefix分解為更小維度的Input與MLP的組合后輸出的結果),訓練完成后,只保留Prefix的參數。 - Prompt Tuning:該方法可以看作是Prefix Tuning的簡化版本,只在輸入層加入prompt tokens,并不需要加入MLP進行調整來解決難訓練的問題。隨著預訓練模型參數量的增加,Prompt Tuning的方法會逼近fine-tuning的結果。
- P-Tuning:該方法的提出主要是為了解決這樣一個問題:大模型的Prompt構造方式嚴重影響下游任務的效果。P-Tuning將Prompt轉換為可以學習的Embedding層,并用MLP+LSTM的方式來對prompt embedding進行一層處理。
-
P-Tuning v2:讓Prompt Tuning能夠在不同參數規模的預訓練模型、針對不同下游任務的結果上都達到匹敵Fine-tuning的結果。相比Prompt Tuning和P-tuning的方法,P-Tuning v2方法在多層加入了Prompts tokens作為輸入,帶來兩個方面的好處:
- 帶來更多可學習的參數(從P-tuning和Prompt Tuning的0.1%增加到0.1%-3%),同時也足夠參數高效。
- 加入到更深層結構中的Prompt能給模型預測帶來更直接的影響。
- Adapter Tuning:該方法設計了Adapter結構(首先是一個down-project層將高維度特征映射到低維特征,然后過一個非線形層之后,再用一個up-project結構將低維特征映射回原來的高維特征;同時也設計了skip-connection結構,確保了在最差的情況下能夠退化為identity),并將其嵌入Transformer的結構里面,在訓練時,固定住原來預訓練模型的參數不變,只對新增的Adapter結構進行微調。同時為了保證訓練的高效性(也就是盡可能少的引入更多參數)。
- LoRA:在涉及到矩陣相乘的模塊,引入A、B這樣兩個低秩矩陣模塊去模擬full fine-tuning的過程,相當于只對語言模型中起關鍵作用的低秩本質維度進行更新。
典型應用:
- ChatGLM-Tuning :一種平價的chatgpt實現方案,基于清華的 ChatGLM-6B + LoRA 進行finetune。
- Alpaca-Lora:使用低秩自適應(LoRA)復現斯坦福羊駝的結果。Stanford Alpaca 是在 LLaMA 整個模型上微調,而 Alpaca-Lora 則是利用 Lora 技術,在凍結原模型 LLaMA 參數的情況下,通過往模型中加入額外的網絡層,并只訓練這些新增的網絡層參數。由于這些新增參數數量較少,這樣不僅微調的成本顯著下降,還能獲得和全模型微調類似的效果。
- BLOOM-LORA:由于LLaMA的限制,我們嘗試使用Alpaca-Lora重新實現BLOOM-LoRA。
PEFT實現:
- PEFT:Huggingface推出的PEFT庫。
- unify-parameter-efficient-tuning:一個參數高效遷移學習的統一框架。
高效微調技術目前存在的兩個問題:
相比全參數微調,高效微調技術目前存在的兩個問題:
- 推理速度會變慢
- 模型精度會變差
影響大模型性能的主要因素
OpenAI的論文Scaling Laws for Neural Language Models中列舉了影響模型性能最大的三個因素:計算量、數據集大小、模型參數量。也就是說,當其他因素不成為瓶頸時,計算量、數據集大小、模型參數量這3個因素中的單個因素指數增加時,loss會線性的下降。
除了以上的因素之外,還有一個比較大的影響因素就是數據質量。在微軟的論文Instruction Tuning with GPT-4中指出,同樣基于LLaMA模型,使用GPT3和GPT4產生的數據,對模型進行Instruction Turing,可以看到GPT4的數據微調過的模型效果遠遠好于GPT3數據微調的模型,可見數據質量帶來的影響。同樣的,Vicuna(7B/13B)的Instruction Turing中,也對shareGPT的數據做了很細致的清洗工作。
衡量大模型水平
要評估一個大型語言模型的水平,可以從以下幾個維度提出具有代表性的問題。
- 理解能力:提出一些需要深入理解文本的問題,看模型是否能準確回答。
- 語言生成能力:讓模型生成一段有關特定主題的文章或故事,評估其生成的文本在結構、邏輯和語法等方面的質量。
- 知識面廣度:請模型回答關于不同主題的問題,以測試其對不同領域的知識掌握程度。這可以是關于科學、歷史、文學、體育或其他領域的問題。一個優秀的大語言模型應該可以回答各種領域的問題,并且準確性和深度都很高。
- 適應性:讓模型處理各種不同類型的任務,例如:寫作、翻譯、編程等,看它是否能靈活應對。
- 長文本理解:提出一些需要處理長文本的問題,例如:提供一篇文章,讓模型總結出文章的要點,或者請模型創作一個故事或一篇文章,讓其有一個完整的情節,并且不要出現明顯的邏輯矛盾或故事結構上的錯誤。一個好的大語言模型應該能夠以一個連貫的方式講述一個故事,讓讀者沉浸其中。
- 長文本生成:請模型創作一個故事或一篇文章,讓其有一個完整的情節,并且不要出現明顯的邏輯矛盾或故事結構上的錯誤。一個好的大語言模型應該能夠以一個連貫的方式講述一個故事,讓讀者沉浸其中。
- 多樣性:提出一個問題,讓模型給出多個不同的答案或解決方案,測試模型的創造力和多樣性。
- 情感分析和推斷:提供一段對話或文本,讓模型分析其中的情感和態度,或者推斷角色間的關系。
- 情感表達:請模型生成帶有情感色彩的文本,如描述某個場景或事件的情感、描述一個人物的情感狀態等。一個優秀的大語言模型應該能夠準確地捕捉情感,將其表達出來。
- 邏輯推理能力:請模型回答需要進行推理或邏輯分析的問題,如概率或邏輯推理等。這可以幫助判斷模型對推理和邏輯思考的能力,以及其在處理邏輯問題方面的準確性。例如:“所有的動物都會呼吸。狗是一種動物。那么狗會呼吸嗎?”
- 問題解決能力:提出實際問題,例如:數學題、編程問題等,看模型是否能給出正確的解答。
- 道德和倫理:測試模型在處理有關道德和倫理問題時的表現,例如:“在什么情況下撒謊是可以接受的?”
- 對話和聊天:請模型進行對話,以測試其對自然語言處理的掌握程度和能力。一個優秀的大語言模型應該能夠準確地回答問題,并且能夠理解人類的語言表達方式。
大模型評估方法:
- 人工評估:LIMA、Phoenix
- 使用 GPT-4 的反饋進行自動評估:Vicuna、Phoenix、Chimera、BELLE
- 指標評估(BLEU-4、ROUGE分數):ChatGLM-6B;對于像ROUGE-L分數的指標評估,有些地方稱其為非自然指令評估(Unnatural Instruction Evaluation)。
大模型評估工具:
大模型推理加速
模型推理作為模型投產的最后一公里,需要確保模型精度的同時追求極致的推理性能。相比傳統模型來說,大模型面臨著更多的挑戰。
當前優化模型最主要技術手段概括來說有以下三個層面:
- 算法層面:蒸餾、量化
- 軟件層面:計算圖優化、模型編譯
- 硬件層面:FP8(NVIDIA H系列GPU開始支持FP8,兼有fp16的穩定性和int8的速度)
推理加速框架:
-
FasterTransformer:英偉達推出的FasterTransformer不修改模型架構而是在計算加速層面優化 Transformer 的 encoder 和 decoder 模塊。具體包括如下:
- 盡可能多地融合除了 GEMM 以外的操作
- 支持 FP16、INT8、FP8
- 移除 encoder 輸入中無用的 padding 來減少計算開銷
-
TurboTransformers:騰訊推出的 TurboTransformers 由 computation runtime 及 serving framework 組成。加速推理框架適用于 CPU 和 GPU,最重要的是,它可以無需預處理便可處理變長的輸入序列。具體包括如下:
- 與 FasterTransformer 類似,它融合了除 GEMM 之外的操作以減少計算量
- smart batching,對于一個 batch 內不同長度的序列,它也最小化了 zero-padding 開銷
- 對 LayerNorm 和 Softmax 進行批處理,使它們更適合并行計算
- 引入了模型感知分配器,以確保在可變長度請求服務期間內存占用較小
經驗與教訓
經驗:
- 對于同一模型,選擇不同的訓練框架,對于資源的消耗情況可能存在顯著差異(比如使用Huggingface Transformers和DeepSpeed訓練OPT-30相對于使用Alpa對于資源的消耗會低不少)。
- 進行大模型模型訓練時,先使用小規模模型(如:OPT-125m/2.7b)進行嘗試,然后再進行大規模模型(如:OPT-13b/30b...)的嘗試,便于出現問題時進行排查。目前來看,業界也是基于相對較小規模參數的模型(6B/7B/13B)進行的優化,同時,13B模型經過指令精調之后的模型效果已經能夠到達GPT4的90%的效果。
教訓:
- 針對已有的環境進行分布式訓練環境搭建時,一定要注意之前環境的python、pip、virtualenv、setuptools的版本。不然創建的虛擬環境即使指定對了Python版本,也可能會遇到很多安裝依賴庫的問題(GPU服務器能夠訪問外網的情況下,建議使用Docker相對來說更方便)。
- 遇到需要升級GLIBC等底層庫需要升級的提示時,一定要慎重,不要輕易升級,否則,可能會造成系統宕機或很多命令無法操作等情況。
結語
實踐出真知,以上是這段時間進行大模型實踐的一點點總結,寫的有一些主觀和片面,后續會持續更新自己研究大模型獲得的一些認知和實踐經驗。