不得不說,為了讓更多人能用上大模型,技術圈真是各出奇招!
模型不夠開放?有人自己上手搞免費開源版。
比如最近風靡全網(wǎng)的DALL·E Mini,Meta開放的OPT-175B(Open Pretrained Transformer)。
都是通過復刻的方式,讓原本不夠open的大模型,變成人人可用。
還有人覺得模型太大,個人玩家很難承受起天價成本。
所以提出異構(gòu)內(nèi)存、并行計算等方法,讓大模型訓練加速又降本。
比如開源項目Colossal-AI,前不久剛實現(xiàn)了讓一塊英偉達3090就能單挑180億參數(shù)大模型。
而在這兩天,他們又來了一波上新:
無縫支持Hugging Face社區(qū)模型,只需添加幾行代碼,就能實現(xiàn)大模型的低成本訓練和微調(diào)。
要知道,Hugging Face作為當下最流行的AI庫之一,提供了超過5萬個AI模型的實現(xiàn),是許多AI玩家訓練大模型的首選。
而Colossal-AI這波操作,是讓公開模型的訓練微調(diào)變得更加切實可行。
并且在訓練效果上也有提升。
單張GPU上,相比于微軟的DeepSpeed,使用Colossal-AI的自動優(yōu)化策略,最快能實現(xiàn)40%的加速。
而PyTorch等傳統(tǒng)深度學習框架,在單張GPU上已經(jīng)無法運行如此大的模型。
對于使用8張GPU的并行訓練,僅需在啟動命令中添加-nprocs 8就能實現(xiàn)。
這波下來,可以說是把個人AI玩家需要考慮的成本、效率、實操問題,都拿捏住了~
無需修改代碼邏輯
光說不練假把式。
下面就以OPT為例,詳細展開看看Colossal-AI的新功能到底怎么用。
OPT,全稱為Open Pretrained Transformer。
它由Meta AI發(fā)布,對標GPT-3,最大參數(shù)量可達1750億。
最大特點就是,GPT-3沒有公開模型權重,而OPT開源了所有代碼及權重。
因此,每一位開發(fā)者都能在此基礎上開發(fā)個性化的下游任務。
下面的舉例,就是根據(jù)OPT提供的預訓練權重,進行因果語言模型(Casual Language Modelling)的微調(diào)。
主要分為兩個步驟:
-
添加配置文件
-
運行啟動
第一步,是根據(jù)想進行的任務添加配置文件。
比如在一張GPU上,以異構(gòu)訓練為例,只需在配置文件里加上相關配置項,并不需要更改代碼的訓練邏輯。
比如,tensor_placement_policy決定了異構(gòu)訓練的策略,參數(shù)可以為CUDA、CPU及auto。
每個策略的優(yōu)點不同、適應的情況也不一樣。
CUDA:將全部模型參數(shù)都放置于GPU上,適合不offload時仍然能進行訓練的傳統(tǒng)場景。
CPU:將模型參數(shù)都放置在CPU內(nèi)存中,僅在GPU顯存中保留當前參與計算的權重,適合超大模型的訓練。
auto:根據(jù)實時的內(nèi)存信息,自動決定保留在GPU顯存中的參數(shù)量,這樣能最大化利用GPU顯存,同時減少CPU-GPU之間的數(shù)據(jù)傳輸。
對于普通用戶來說,使用auto策略是最便捷的。
這樣可以由Colossal-AI自動化地實時動態(tài)選擇最佳異構(gòu)策略,最大化計算效率。
from colossalai.zero.shard_utils import TensorShardStrategy
zero = dict(model_config=dict(shard_strategy=TensorShardStrategy(),
tensor_placement_policy="auto"),
optimizer_config=dict(gpu_margin_mem_ratio=0.8))
第二步,是在配置文件準備好后,插入幾行代碼來啟動新功能。
首先,通過一行代碼,使用配置文件來啟動Colossal-AI。
Colossal-AI會自動初始化分布式環(huán)境,讀取相關配置,然后將配置里的功能自動注入到模型及優(yōu)化器等組件中。
colossalai.launch_from_torch(config='./configs/colossalai_zero.py')
然后,還是像往常一樣定義數(shù)據(jù)集、模型、優(yōu)化器、損失函數(shù)等。
比如直接使用原生PyTorch代碼,在定義模型時,只需將模型放置于ZeroInitContext下初始化即可。
在這里,使用的是Hugging Face提供的OPTForCausalLM模型以及預訓練權重,在Wikitext數(shù)據(jù)集上進行微調(diào)。
with ZeroInitContext(target_device=torch.cuda.current_device(),
shard_strategy=shard_strategy,
shard_param=True):
model = OPTForCausalLM.from_pretrained(
'facebook/opt-1.3b'
config=config
)
接下來,只需要調(diào)用colossalai.initialize,便可將配置文件里定義的異構(gòu)內(nèi)存功能統(tǒng)一注入到訓練引擎中,即可啟動相應功能。
train_dataloader, eval_dataloader, lr_scheduler = colossalai.initialize(model=model,
optimizer=optimizer,
criterion=criterion,
train_dataloader=train_dataloader,
test_dataloader=eval_dataloader,
lr_scheduler=lr_scheduler)
還是得靠GPU+CPU異構(gòu)
而能夠讓用戶實現(xiàn)如上“傻瓜式”操作的關鍵,還是AI系統(tǒng)本身要足夠聰明。
發(fā)揮核心作用的是Colossal-AI系統(tǒng)的高效異構(gòu)內(nèi)存管理子系統(tǒng)Gemini。
它就像是系統(tǒng)內(nèi)的一個總管,在收集好計算所需的信息后,動態(tài)分配CPU、GPU的內(nèi)存使用。
具體工作原理,就是在前面幾個step進行預熱,收集PyTorch動態(tài)計算圖中的內(nèi)存消耗信息。
在預熱結(jié)束后,計算一個算子前,利用收集的內(nèi)存使用記錄,Gemini將預留出這個算子在計算設備上所需的峰值內(nèi)存,并同時從GPU顯存移動一些模型張量到CPU內(nèi)存。
Gemini內(nèi)置的內(nèi)存管理器給每個張量都標記一個狀態(tài)信息,包括HOLD、COMPUTE、FREE等。
然后,根據(jù)動態(tài)查詢到的內(nèi)存使用情況,不斷動態(tài)轉(zhuǎn)換張量狀態(tài)、調(diào)整張量位置。
帶來的直接好處,就是能在硬件非常有限的情況下,最大化模型容量和平衡訓練速度。
要知道,業(yè)界主流方法ZeRO (Zero Reduency Optimizer),盡管也利用CPU+GPU異構(gòu)內(nèi)存的方法,但是由于是靜態(tài)劃分,還是會引起系統(tǒng)崩潰、不必要通信量等問題。
而且,使用動態(tài)異構(gòu)CPU+GPU內(nèi)存的辦法,還能用加內(nèi)存條的辦法來擴充內(nèi)存。
怎么也比買高端顯卡劃算多了。
目前,使用Colossal-AI的方法,RTX 2060 6GB普通游戲本能訓練15億參數(shù)模型;RTX 3090 24GB主機直接單挑180億參數(shù)大模型;Tesla V100 32GB連240億參數(shù)都能拿下。
除了最大化利用內(nèi)存外,Colossal-AI還使用分布式并行的方法,讓訓練速度不斷提升。
它提出同時使用數(shù)據(jù)并行、流水并行、2.5維張量并行等復雜并行策略。
方法雖復雜,但上手卻還是非?!吧倒喜僮鳌?,只需簡單聲明,就能自動實現(xiàn)。
無需像其他系統(tǒng)和框架侵入代碼,手動處理復雜的底層邏輯。
parallel = dict(
pipeline=2,
tensor=dict(mode='2.5d', depth = 1, size=4)
)
Colossal-AI還能做什么?
實際上,自開源以來,Colossal-AI已經(jīng)多次在GitHub及Papers With Code熱榜位列世界第一,在技術圈小有名氣。
除了如上提到的用單張GPU訓練大模型外,Colossal-AI在擴展至數(shù)十張甚至數(shù)百張GPU的大規(guī)模并行場景時,相比于英偉達Megatron-LM等現(xiàn)有系統(tǒng),性能可以翻倍,使用資源可以降低至其十分之一之下。
換算一下,在預訓練GPT-3等超大AI模型上,節(jié)省的費用可以達到數(shù)百萬元。
據(jù)透露,Colossal-AI相關的解決方案已經(jīng)被自動駕駛、云計算、零售、醫(yī)藥、芯片等行業(yè)的知名廠商用上了。
與此同時,他們也非常注重開源社區(qū)建設,提供中文教程、開放用戶社群論壇,根據(jù)大家的需求反饋不斷更新迭代。
比如我們發(fā)現(xiàn),之前有粉絲留言詢問,Colossal-AI能否直接加載Hugging Face上的一些模型?
好嘛,這次更新就來了。
所以,對于大模型訓練,你覺得現(xiàn)在還有哪些難點亟需解決呢?
審核編輯 :李倩
-
開源
+關注
關注
3文章
3385瀏覽量
42609 -
模型
+關注
關注
1文章
3279瀏覽量
48980 -
代碼
+關注
關注
30文章
4813瀏覽量
68833 -
大模型
+關注
關注
2文章
2516瀏覽量
2942
原文標題:1塊GPU+幾行代碼,大模型訓練提速40%!無縫支持HuggingFace,來自國產(chǎn)開源項目?
文章出處:【微信號:iotmag,微信公眾號:iotmag】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論