設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

AI 畫畫模型成本被打下來了!預(yù)訓(xùn)練成本直降 85%,微調(diào)只需單張 RTX 2070,這個(gè)國產(chǎn)開源項(xiàng)目又上新了

量子位 2022/11/9 14:50:09 責(zé)編:遠(yuǎn)生

火爆全球的 Stable Diffusion,預(yù)訓(xùn)練和微調(diào)成本,正式被打下來了!

現(xiàn)在,預(yù)訓(xùn)練的速度被提升到 6.5 倍,成本直降 85%;

微調(diào)只需 RTX 2070/3050 即可搞定,硬件成本直降近九成。

這就是國產(chǎn)項(xiàng)目 Colossal-AI 最新開的加速方案。

今年,Stable Diffusion 可謂火爆圈內(nèi)圈外,而且最近憑借免費(fèi)開源還效果好的特點(diǎn),進(jìn)一步出圈,讓人看到了 AIGC 的巨大潛力和前景。

藝術(shù)圈和 AI 圈大神都爭相拿它創(chuàng)作,GitHub star 數(shù)已達(dá) 33.5k,背后公司估值甚至飆升至 10 億美金。

Stable Diffusion 由此也成為擴(kuò)散模型中最火出圈的項(xiàng)目。

BUT,它唯一的缺點(diǎn)是,訓(xùn)練成本真的很高!

僅 Stable Diffusion v1 版本的模型單次訓(xùn)練便需要 150000 個(gè) A100 GPU Hour;

微調(diào)至少需要 RTX 3090/4090 這類高端消費(fèi)級(jí)顯卡。

其背后公司 Stability AI 為了維護(hù)運(yùn)營和算力需求,擁有一個(gè)由 4000 塊 A100 組成的 GPU 集群,光成本就超過 5000 萬美元(折合人民幣約 3.6 億)。

實(shí)際上,由于擴(kuò)散模型本身原理機(jī)制特殊,導(dǎo)致它本身對硬件顯存、計(jì)算速度的要求都很高,而且使用的數(shù)據(jù)庫也是千億量級(jí)的。

所以想要提升訓(xùn)練速度、降低成本,還真不是件容易事。

那么,Colossal-AI 到底是如何實(shí)現(xiàn)的?

從顯存入手

首先來解釋,為什么擴(kuò)散模型對硬件的要求高。

擴(kuò)散模型主要包括兩個(gè)過程:前向擴(kuò)散和反向生成。

前向擴(kuò)散是對一張圖像逐漸添加高斯噪聲,直至變成隨機(jī)噪聲。

反向生成是去噪聲過程,將一個(gè)隨機(jī)噪聲使用多個(gè) U-Net 進(jìn)行逐漸去噪,直至生成一張圖像,這也是擴(kuò)散模型的訓(xùn)練過程。

相比于傳統(tǒng)端到端深度學(xué)習(xí)模型,擴(kuò)散模型的訓(xùn)練過程顯然更為復(fù)雜。

其中 Stable Diffusion 除了擴(kuò)散模型本身,還包含一個(gè) Frozen CLIP Textcoder 來輸入文本提示詞(text prompts)、一個(gè)自動(dòng)編碼器(Autoencoder)將高分辨率圖像壓縮到潛在空間(Latent Space),并且還要在每個(gè) time step 計(jì)算 loss。

這樣一來,訓(xùn)練方案對顯存開銷、計(jì)算速度都提出了極大挑戰(zhàn)。

針對如上問題,Colossal-AI 分別從預(yù)訓(xùn)練、微調(diào)兩個(gè)步驟上進(jìn)行了優(yōu)化。

預(yù)訓(xùn)練階段,主要做的就是降低顯存開銷。

一般來說 batch size 越大,訓(xùn)練速度越快,擴(kuò)散模型亦是如此。

通過 ZeRO、Gemini、Chunk-based 內(nèi)存管理等策略以及 Flash Attention 模塊優(yōu)化 Cross-attention 計(jì)算,Colossal-AI 可以讓用戶在 8GB 顯存的普通消費(fèi)級(jí)顯卡(如 RTX 2070/3050)上訓(xùn)練擴(kuò)散模型。

如果在 A100 上,則能將單卡 Batch Size 直接擴(kuò)大到 256。

對比 Stable-diffusion-v1 FP32 的 Distributed Data Parallel (DDP) ,訓(xùn)練可以提速 6.5 倍。

由此可以大幅縮短訓(xùn)練時(shí)長,從而降低高達(dá)數(shù)百萬美元的訓(xùn)練成本。

在微調(diào)上,對于大多數(shù) AIGC 玩家而言,都傾向于選擇使用開源的預(yù)訓(xùn)練模型權(quán)重來進(jìn)行微調(diào)個(gè)性化下游任務(wù)。

一方面是由于擴(kuò)散模型本身復(fù)雜,另一方面是 Stable Diffusion 預(yù)訓(xùn)練采用的是 LAION-5B 數(shù)據(jù)集,包含 5850 億個(gè)圖片文本對,需要 240TB 儲(chǔ)存空間。

但現(xiàn)有的很多開源微調(diào)方案中,使用的訓(xùn)練并行方式主要為 DDP,這導(dǎo)致訓(xùn)練過程中占用的顯存很多。

即使微調(diào)也至少需要 RTX 3090/4090 這類最高端的消費(fèi)級(jí)顯卡。

加之,現(xiàn)階段很多開源的訓(xùn)練框架都沒有給出完整的訓(xùn)練配置與腳本,還需要自己來做一些補(bǔ)全和調(diào)試工作。

基于現(xiàn)狀,Colossal-AI 提出了首個(gè)同時(shí)開源完整訓(xùn)練配置參數(shù)和訓(xùn)練腳本的方案

這種方案一方面可以讓用戶不再局限于現(xiàn)有的權(quán)重推理,更加靈活地訓(xùn)練出針對新下游任務(wù)的最新版細(xì)分模型,擴(kuò)大應(yīng)用范圍;

另一方面,由于引入了顯存優(yōu)化等技術(shù),方案支持在普通個(gè)人電腦的單張顯卡(如 GeForce RTX 2070/3050 8GB)上快速完成微調(diào)任務(wù)。

要知道,RTX 2070 現(xiàn)在的價(jià)格可比 3090/4090 便宜了將近 9 成。

此外,對于速度不敏感的任務(wù),還可以進(jìn)一步使用 Colossal-AI NVMe,即利用低成本的硬盤空間降低顯存消耗。

優(yōu)化秘籍是啥?

所以顯存開銷是通過哪些技術(shù)降下去的?

主要基于三個(gè)方面:

ZeRO+Gemini

Flash Attention

FP16、acitvation checkpoint 等常見優(yōu)化技術(shù)

先來看 ZeRO+Gemini。

ZeRO 是零冗余優(yōu)化器。

這種方法主要通過切分優(yōu)化器狀態(tài)、梯度、模型參數(shù),使 GPU 僅保存當(dāng)前計(jì)算所需的部分,從而來消除數(shù)據(jù)并行、模型并行中存在的內(nèi)存冗余。

和經(jīng)典的數(shù)據(jù)并行策略相比,它能極大提高內(nèi)存使用效率,同時(shí)不犧牲計(jì)算粒度和通信效率。

與此同時(shí),Colossal-AI 還引入了 Chunk 機(jī)制進(jìn)一步提升 ZeRO 性能。

將運(yùn)算順序上連續(xù)的一組參數(shù)存入一個(gè) Chunk 中(Chunk 即一段連續(xù)的內(nèi)存空間),每個(gè) Chunk 的大小相同。

Chunk 方式組織內(nèi)存可以保證 PCI-e 和 GPU-GPU 之間網(wǎng)絡(luò)帶寬的高效利用,減小了通信次數(shù),同時(shí)避免潛在的內(nèi)存碎片。

Chunk 機(jī)制

Gemini 是 Colossal-AI 的異構(gòu)內(nèi)存空間管理器。

它支持將優(yōu)化器從 GPU 卸載到 CPU,以節(jié)省 GPU 內(nèi)存占用。

打破 GPU 內(nèi)存墻的限制,可以實(shí)現(xiàn)同時(shí)利用 GPU 內(nèi)存和 CPU 內(nèi)存(由 CPU DRAM 或 NVMe SSD 內(nèi)存組成),從而進(jìn)一步擴(kuò)展可訓(xùn)練模型規(guī)模。

通過 ZeRO+Gemini 提升硬件的模型容量

第二方面是 Flash Attention 機(jī)制。

LDM(Latent Diffusion Models)是改善擴(kuò)散模型效率的一種方法,它通過在模型框架中引入交叉注意力機(jī)制(Cross-Attention)來實(shí)現(xiàn)多模態(tài)訓(xùn)練,使得擴(kuò)散模型可以更靈活地實(shí)現(xiàn)對 class-condition, text-to-image, layout-to-image 的支持。

但是 Cross-Attention 層對比原始擴(kuò)散模型的 CNN 層增加了額外的計(jì)算開銷,極大增加了訓(xùn)練成本。

相比之下,Flash Attention 是針對長序列 Attention 的加速版本。

它使用 Flatten 來減少 GPU 高帶寬內(nèi)存(HBM)之間的內(nèi)存讀 / 寫次數(shù),F(xiàn)lash Attention 同時(shí)針對塊狀稀疏的 Attention,設(shè)計(jì)了一個(gè)近似的注意力算法,比現(xiàn)有任何 attention 方法都要快。

它能將 Attention 的速度提升 104%,將端到端訓(xùn)練的峰值顯存減少 23%。

 Flash Attention

除了以上兩方面,Colossal-AI 還集成了 FP16、activation checkpoint 等常見優(yōu)化技術(shù)。

例如,activate checkpoint 通過用計(jì)算換取內(nèi)存來工作。

它避免存儲(chǔ)整個(gè)計(jì)算圖的所有中間激活用于反向計(jì)算,在檢查點(diǎn)部分不保存中間激活,而是在反向傳遞中重新計(jì)算它們,進(jìn)一步降低了顯存。

而 FP16 在基本不影響精度前提下,將原本的 32 位浮點(diǎn)數(shù)運(yùn)算轉(zhuǎn)為 16 位,降低顯存使用,提升計(jì)算效率。

上手也超簡單

到了實(shí)操環(huán)節(jié),Colossal-AI 只需少量代碼,即可快捷啟動(dòng)擴(kuò)散模型訓(xùn)練。

不同于常見 PyTorch 開源項(xiàng)目,Stable Diffusion 是基于 PyTorch Lighting 搭建的。

PyTorch Lightning 為流行的深度學(xué)習(xí)框架 PyTorch 提供了簡潔易用、靈活高效的高級(jí)接口,為廣大 AI 研究人員提供了簡潔易用的高層次抽象,從而使深度學(xué)習(xí)實(shí)驗(yàn)更易于閱讀和再現(xiàn),

受 PyTorch Lightning 的邀請,Colossal-AI 已集成作為 PyTorch Lightning 的官方大模型解決方案。

以 Stable Diffusion 為例,啟動(dòng)代碼如下:

from colossalai.nn.optimizer import HybridAdam
from lightning.pytorch import trainer

class MyDiffuser(LightningModule):
    ...

    def configure_sharded_model(self) -> None:
        # create your model here
        self.model = construct_diffuser_model(...)
        ...

    def configure_optimizers(self):
        # use the specified optimizer
        optimizer = HybridAdam(self.model.parameters(), self.lr)
        ...

model = MyDiffuser()
trainer = Trainer(accelerator="gpu", devices=1, precision=16, strategy="colossalai")
trainer.fit(model)

除此之外,Colossal-AI 和 PyTorch Lightning 也對 OPT、HuggingFace 等熱門模型和社區(qū)提供了良好支持及優(yōu)化。

低成本微調(diào)

在微調(diào)方面,Colossal-AI 提供了基于 HuggingFace 上開源的 Stable Diffusion 模型權(quán)重進(jìn)行微調(diào)的功能。

用戶只需簡單修改 Dataloader 載入自己的微調(diào)數(shù)據(jù)集并讀取預(yù)訓(xùn)練權(quán)重,再修改參數(shù)配置 yaml 文件并運(yùn)行訓(xùn)練腳本,便可在個(gè)人電腦微調(diào)屬于自己的個(gè)性化模型。

model:
  target: ldm.models.diffusion.ddpm.LatentDiffusion
  params:
    your_sub_module_config:
      target: your.model.import.path
      params:
        from_pretrained: 'your_file_path/unet/diffusion_pytorch_model.bin'
        ...

lightning:
  trainer:
    strategy:
      target: pytorch_lightning.strategies.ColossalAIStrategy
      params:
        ...

 python main.py --logdir /your_log_dir -t -b config/train_colossalai.yaml

快速推理

Colossal-AI 同時(shí)支持原生 Stable Diffusion 推理管道。

在完成訓(xùn)練或精調(diào)后,只需直接調(diào)用 diffuser 庫并加載自己保存的模型參數(shù),即可直接進(jìn)行推理,無需進(jìn)行其他改動(dòng)。

這樣可以方便新用戶熟悉推理流程,并讓習(xí)慣使用原版框架的用戶快速上手。

from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained(
    "your_ColoDiffusion_checkpoint_path"
    ).to("cuda")

image = pipe('your prompt', num_inference_steps=50)["sample"][0]
image.save('file path')

上述推理流程生成的作品

One More Thing

實(shí)際上,如上提到的 Colossal-AI 不只能用來加速訓(xùn)練擴(kuò)散模型,它面向各種大模型。

通過多維自動(dòng)并行、異構(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)國際專家的嚴(yán)格評(píng)審,Colossal-AI 已成功入選為 SC、AAAI、PPoPP 等國際 AI 與 HPC 頂級(jí)會(huì)議的官方教程。

目前,其相關(guān)解決方案已經(jīng)成功在自動(dòng)駕駛、云計(jì)算、零售、醫(yī)藥、芯片等行業(yè)知名廠商落地應(yīng)用。

例如針對生物醫(yī)藥行業(yè)的蛋白質(zhì)結(jié)構(gòu)預(yù)測模型 AlphaFold,基于 Colossal-AI 的優(yōu)化方案,F(xiàn)astFold 成功將單張 GPU 可推理氨基酸序列長度擴(kuò)增到一萬,覆蓋 99.9999% 的蛋白質(zhì)。

只用筆記本上的消費(fèi)級(jí)顯卡就能解析 90% 蛋白質(zhì)。

而且還能對訓(xùn)練、推理進(jìn)行全流程并行加速,目前已助力多家新型藥物研發(fā)企業(yè)縮短開發(fā)流程,降低開發(fā)成本。

傳送門

開源地址:

https://github.com/hpcaitech/ColossalAI

參考鏈接:

  • [1]https://medium.com/@yangyou_berkeley/diffusion-pretraining-and-hardware-fine-tuning-can-be-almost-7x-cheaper-85e970fe207b

  • [2]https://github.com/CompVis/stable-diffusion

  • [3]https://arxiv.org/abs/2205.14135

  • [4]https://arxiv.org/abs/2112.10752

  • [5]https://openai.com/blog/triton/

本文來自微信公眾號(hào):量子位 (ID:QbitAI),作者:明敏

廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:AI

軟媒旗下網(wǎng)站: IT之家 最會(huì)買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機(jī)APP應(yīng)用 魔方 最會(huì)買 要知