AI畫畫模型成本被打下來了!預(yù)訓(xùn)練成本直降85%,微調(diào)只需單張RTX 2070,這個國產(chǎn)開源項目又上新了
本文經(jīng)AI新媒體量子位(公眾號ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
火爆全球的Stable Diffusion,預(yù)訓(xùn)練和微調(diào)成本,正式被打下來了!
現(xiàn)在,預(yù)訓(xùn)練的速度被提升到6.5倍,成本直降85%;
微調(diào)只需RTX 2070/3050即可搞定,硬件成本直降近九成。
這就是國產(chǎn)項目Colossal-AI最新開源的加速方案。
開源地址:https://github.com/hpcaitech/ColossalAI
?
今年,Stable Diffusion可謂火爆圈內(nèi)圈外,而且最近憑借免費開源還效果好的特點,進一步出圈,讓人看到了AIGC的巨大潛力和前景。
藝術(shù)圈和AI圈大神都爭相拿它創(chuàng)作,GitHub star數(shù)已達33.5k,背后公司估值甚至飆升至10億美金。
Stable Diffusion由此也成為擴散模型中最火出圈的項目。
BUT,它唯一的缺點是,訓(xùn)練成本真的很高!
僅Stable Diffusion v1 版本的模型單次訓(xùn)練便需要150000個A100 GPU Hour;
微調(diào)至少需要RTX 3090/4090這類高端消費級顯卡。
其背后公司Stability AI為了維護運營和算力需求,擁有一個由4000塊A100組成的GPU集群,光成本就超過5000萬美元(折合人民幣約3.6億)。
實際上,由于擴散模型本身原理機制特殊,導(dǎo)致它本身對硬件顯存、計算速度的要求都很高,而且使用的數(shù)據(jù)庫也是千億量級的。
所以想要提升訓(xùn)練速度、降低成本,還真不是件容易事。
那么,Colossal-AI到底是如何實現(xiàn)的?
從顯存入手
首先來解釋,為什么擴散模型對硬件的要求高。
擴散模型主要包括兩個過程:前向擴散和反向生成。
前向擴散是對一張圖像逐漸添加高斯噪聲,直至變成隨機噪聲。
反向生成是去噪聲過程,將一個隨機噪聲使用多個U-Net進行逐漸去噪,直至生成一張圖像,這也是擴散模型的訓(xùn)練過程。
相比于傳統(tǒng)端到端深度學(xué)習(xí)模型,擴散模型的訓(xùn)練過程顯然更為復(fù)雜。
其中Stable Diffusion除了擴散模型本身,還包含一個Frozen CLIP Textcoder 來輸入文本提示詞(text prompts)、一個自動編碼器(Autoencoder)將高分辨率圖像壓縮到潛在空間(Latent Space),并且還要在每個time step計算loss。
這樣一來,訓(xùn)練方案對顯存開銷、計算速度都提出了極大挑戰(zhàn)。
針對如上問題,Colossal-AI分別從預(yù)訓(xùn)練、微調(diào)兩個步驟上進行了優(yōu)化。
預(yù)訓(xùn)練階段,主要做的就是降低顯存開銷。
一般來說batch size越大,訓(xùn)練速度越快,擴散模型亦是如此。
通過ZeRO、Gemini、Chunk-based內(nèi)存管理等策略以及Flash Attention模塊優(yōu)化Cross-attention計算,Colossal-AI可以讓用戶在8GB顯存的普通消費級顯卡(如RTX 2070/3050)上訓(xùn)練擴散模型。
如果在A100上,則能將單卡Batch Size直接擴大到256。
對比Stable-diffusion-v1 FP32的Distributed Data Parallel (DDP) ,訓(xùn)練可以提速6.5倍。
由此可以大幅縮短訓(xùn)練時長,從而降低高達數(shù)百萬美元的訓(xùn)練成本。
在微調(diào)上,對于大多數(shù)AIGC玩家而言,都傾向于選擇使用開源的預(yù)訓(xùn)練模型權(quán)重來進行微調(diào)個性化下游任務(wù)。
一方面是由于擴散模型本身復(fù)雜,另一方面是Stable Diffusion預(yù)訓(xùn)練采用的是LAION-5B數(shù)據(jù)集,包含5850億個圖片文本對,需要240TB儲存空間。
但現(xiàn)有的很多開源微調(diào)方案中,使用的訓(xùn)練并行方式主要為DDP,這導(dǎo)致訓(xùn)練過程中占用的顯存很多。
即使微調(diào)也至少需要RTX 3090/4090這類最高端的消費級顯卡。
加之,現(xiàn)階段很多開源的訓(xùn)練框架都沒有給出完整的訓(xùn)練配置與腳本,還需要自己來做一些補全和調(diào)試工作。
基于現(xiàn)狀,Colossal-AI提出了首個同時開源完整訓(xùn)練配置參數(shù)和訓(xùn)練腳本的方案。
這種方案一方面可以讓用戶不再局限于現(xiàn)有的權(quán)重推理,更加靈活地訓(xùn)練出針對新下游任務(wù)的最新版細分模型,擴大應(yīng)用范圍;
另一方面,由于引入了顯存優(yōu)化等技術(shù),方案支持在普通個人電腦的單張顯卡(如GeForce RTX 2070/3050 8GB)上快速完成微調(diào)任務(wù)。
要知道,RTX 2070現(xiàn)在的價格可比3090/4090便宜了將近9成。
此外,對于速度不敏感的任務(wù),還可以進一步使用Colossal-AI NVMe,即利用低成本的硬盤空間降低顯存消耗。
優(yōu)化秘籍是啥?
所以顯存開銷是通過哪些技術(shù)降下去的?
主要基于三個方面:
- ZeRO+Gemini
- Flash Attention
- FP16、acitvation checkpoint等常見優(yōu)化技術(shù)
先來看ZeRO+Gemini。
ZeRO是零冗余優(yōu)化器。
這種方法主要通過切分優(yōu)化器狀態(tài)、梯度、模型參數(shù),使GPU僅保存當(dāng)前計算所需的部分,從而來消除數(shù)據(jù)并行、模型并行中存在的內(nèi)存冗余。
和經(jīng)典的數(shù)據(jù)并行策略相比,它能極大提高內(nèi)存使用效率,同時不犧牲計算粒度和通信效率。
與此同時,Colossal-AI還引入了Chunk機制進一步提升ZeRO性能。
將運算順序上連續(xù)的一組參數(shù)存入一個Chunk中(Chunk即一段連續(xù)的內(nèi)存空間),每個Chunk的大小相同。
Chunk方式組織內(nèi)存可以保證PCI-e和GPU-GPU之間網(wǎng)絡(luò)帶寬的高效利用,減小了通信次數(shù),同時避免潛在的內(nèi)存碎片。
△Chunk機制
Gemini是Colossal-AI的異構(gòu)內(nèi)存空間管理器。
它支持將優(yōu)化器從GPU卸載到CPU,以節(jié)省GPU內(nèi)存占用。
打破GPU內(nèi)存墻的限制,可以實現(xiàn)同時利用GPU內(nèi)存和CPU內(nèi)存(由 CPU DRAM 或 NVMe SSD內(nèi)存組成),從而進一步擴展可訓(xùn)練模型規(guī)模。
△通過ZeRO+Gemini提升硬件的模型容量
第二方面是Flash Attention機制。
LDM(Latent Diffusion Models)是改善擴散模型效率的一種方法,它通過在模型框架中引入交叉注意力機制(Cross-Attention)來實現(xiàn)多模態(tài)訓(xùn)練,使得擴散模型可以更靈活地實現(xiàn)對class-condition, text-to-image, layout-to-image的支持。
但是Cross-Attention層對比原始擴散模型的CNN層增加了額外的計算開銷,極大增加了訓(xùn)練成本。
相比之下,Flash Attention是針對長序列Attention的加速版本。
它使用Flatten來減少GPU高帶寬內(nèi)存(HBM)之間的內(nèi)存讀/寫次數(shù),F(xiàn)lash Attention同時針對塊狀稀疏的Attention,設(shè)計了一個近似的注意力算法,比現(xiàn)有任何attention方法都要快。
它能將Attention的速度提升104%,將端到端訓(xùn)練的峰值顯存減少23%。
△ Flash Attention
除了以上兩方面,Colossal-AI還集成了FP16、activation checkpoint等常見優(yōu)化技術(shù)。
例如,activate checkpoint通過用計算換取內(nèi)存來工作。
它避免存儲整個計算圖的所有中間激活用于反向計算,在檢查點部分不保存中間激活,而是在反向傳遞中重新計算它們,進一步降低了顯存。
而FP16在基本不影響精度前提下,將原本的32位浮點數(shù)運算轉(zhuǎn)為16位,降低顯存使用,提升計算效率。
上手也超簡單
到了實操環(huán)節(jié),Colossal-AI只需少量代碼,即可快捷啟動擴散模型訓(xùn)練。
不同于常見PyTorch開源項目,Stable Diffusion是基于PyTorch Lighting搭建的。
PyTorch Lightning為流行的深度學(xué)習(xí)框架PyTorch提供了簡潔易用、靈活高效的高級接口,為廣大AI研究人員提供了簡潔易用的高層次抽象,從而使深度學(xué)習(xí)實驗更易于閱讀和再現(xiàn),
受PyTorch Lightning的邀請,Colossal-AI已集成作為PyTorch Lightning的官方大模型解決方案。
以Stable Diffusion為例,啟動代碼如下:
除此之外,Colossal-AI和PyTorch Lightning也對OPT、HuggingFace等熱門模型和社區(qū)提供了良好支持及優(yōu)化。
低成本微調(diào)
在微調(diào)方面,Colossal-AI提供了基于HuggingFace上開源的Stable Diffusion模型權(quán)重進行微調(diào)的功能。
用戶只需簡單修改Dataloader載入自己的微調(diào)數(shù)據(jù)集并讀取預(yù)訓(xùn)練權(quán)重,再修改參數(shù)配置yaml文件并運行訓(xùn)練腳本,便可在個人電腦微調(diào)屬于自己的個性化模型。
快速推理
Colossal-AI同時支持原生Stable Diffusion推理管道。
在完成訓(xùn)練或精調(diào)后,只需直接調(diào)用diffuser庫并加載自己保存的模型參數(shù),即可直接進行推理,無需進行其他改動。
這樣可以方便新用戶熟悉推理流程,并讓習(xí)慣使用原版框架的用戶快速上手。
△上述推理流程生成的作品
One More Thing
實際上,如上提到的Colossal-AI不只能用來加速訓(xùn)練擴散模型,它面向各種大模型。
通過多維自動并行、異構(gòu)內(nèi)存管理、大規(guī)模優(yōu)化庫、自適應(yīng)任務(wù)調(diào)度等方法,Colossal-AI可以高效快速部署AI大模型訓(xùn)練和推理,降低應(yīng)用成本。
自開源以來,Colossal-AI多次在GitHub及Paper With Code熱榜上位列世界第一。
經(jīng)國際專家的嚴格評審,Colossal-AI已成功入選為SC、AAAI、PPoPP等國際AI與HPC頂級會議的官方教程。
目前,其相關(guān)解決方案已經(jīng)成功在自動駕駛、云計算、零售、醫(yī)藥、芯片等行業(yè)知名廠商落地應(yīng)用。
例如針對生物醫(yī)藥行業(yè)的蛋白質(zhì)結(jié)構(gòu)預(yù)測模型AlphaFold,基于Colossal-AI的優(yōu)化方案,F(xiàn)astFold成功將單張GPU可推理氨基酸序列長度擴增到一萬,覆蓋99.9999%的蛋白質(zhì)。
只用筆記本上的消費級顯卡就能解析90%蛋白質(zhì)。
而且還能對訓(xùn)練、推理進行全流程并行加速,目前已助力多家新型藥物研發(fā)企業(yè)縮短開發(fā)流程,降低開發(fā)成本。
傳送門
開源地址:??https://github.com/hpcaitech/ColossalAI??