YYDS!克隆ChatGPT,開(kāi)源模型完整復(fù)現(xiàn),殺瘋了!
以 ChatGPT、GPT4 為代表的 AI 應(yīng)用和大模型火爆全球,被視為開(kāi)啟了新的科技工業(yè)革命和 AGI (通用人工智能)的新起點(diǎn)。不僅科技巨頭間你追我趕,爭(zhēng)相推出新品,許多學(xué)術(shù)界、工業(yè)界的 AI 大佬也紛紛投入投身相關(guān)創(chuàng)業(yè)浪潮。生成式 AI 正以“天”為單位,快速迭代,持續(xù)狂飆!
然而,OpenAI 并未將其開(kāi)源,它們背后的技術(shù)細(xì)節(jié)有哪些?如何快速跟進(jìn)、追趕并參與到此輪技術(shù)浪潮中?如何降低 AI 大模型構(gòu)建和應(yīng)用的高昂成本?如何保護(hù)核心數(shù)據(jù)與知識(shí)產(chǎn)權(quán)不會(huì)因使用第三方大模型 API 外泄?
作為當(dāng)下最受歡迎的開(kāi)源 AI 大模型解決方案,Colossal-AI 率先建立了包含監(jiān)督數(shù)據(jù)集收集->監(jiān)督微調(diào)->獎(jiǎng)勵(lì)模型訓(xùn)練->強(qiáng)化學(xué)習(xí)微調(diào)的完整 RLHF 流程,以 LLaMA 為基礎(chǔ)預(yù)訓(xùn)練模型,推出 ColossalChat,是目前最接近 ChatGPT 原始技術(shù)方案的實(shí)用開(kāi)源項(xiàng)目!
開(kāi)源地址
https://github.com/hpcaitech/ColossalAI
包含以下內(nèi)容
1、Demo:可直接在線體驗(yàn)?zāi)P托Ч?,無(wú)需注冊(cè)或 waitinglist2、訓(xùn)練代碼:開(kāi)源完整 RLHF 訓(xùn)練代碼,已開(kāi)源至含 7B 和 13B 兩種模型3、數(shù)據(jù)集:開(kāi)源 104K 中、英雙語(yǔ)數(shù)據(jù)集4、推理部署:4bit 量化推理 70 億參數(shù)模型僅需 4GB 顯存5、模型權(quán)重:僅需單臺(tái)服務(wù)器少量算力即可快速?gòu)?fù)現(xiàn)6、更大規(guī)模模型、數(shù)據(jù)集、其他優(yōu)化等將保持高速迭代添加
平價(jià)模型,強(qiáng)大能力
ColossalChat 僅需不到百億參數(shù),在大語(yǔ)言模型的基礎(chǔ)上進(jìn)行RLHF微調(diào),即可掌握中、英雙語(yǔ)能力,達(dá)到與 ChatGPT 和 GPT-3.5 類似的效果。
例如常識(shí)問(wèn)答:

中文應(yīng)答:

寫(xiě)一封郵件:

寫(xiě)個(gè)算法:

完整ChatGPT克隆方案
盡管 ChatGPT 和 GPT-4 等 GPT 系列模型非常強(qiáng)大,但是它們不太可能被完全開(kāi)源。幸運(yùn)的是,開(kāi)源社區(qū)一直在不斷努力。
例如 Meta 開(kāi)源了 LLaMA 模型,該模型的參數(shù)量從 70 億到 650 億不等,130 億參數(shù)即可勝過(guò) 1750 億的 GPT-3 模型在大多數(shù)基準(zhǔn)測(cè)試的表現(xiàn)。但是由于沒(méi)有被指令微調(diào)(instruct tuning),因此實(shí)際生成效果不夠理想。
斯坦福的 Alpaca 通過(guò)調(diào)用OpenAI API,以 self-instruct 方式生成訓(xùn)練數(shù)據(jù),使得僅有 70 億參數(shù)的輕量級(jí)模型以極低成本微調(diào)后,即可獲得媲美 GPT-3.5 這樣千億參數(shù)的超大規(guī)模語(yǔ)言模型的對(duì)話效果。
但是現(xiàn)有開(kāi)源方案都可以被視為只得到了人類反饋強(qiáng)化學(xué)習(xí)(RLHF)中第一步的監(jiān)督微調(diào)模型,沒(méi)有進(jìn)行后續(xù)的對(duì)齊和微調(diào)工作。同時(shí) Alpaca 的訓(xùn)練數(shù)據(jù)集過(guò)小,語(yǔ)料只有英文,也在一定程度上限制了模型的性能。
而?ChatGPT 和 GPT-4 的驚艷效果,還在于將 RLHF 引入訓(xùn)練過(guò)程,使得生成內(nèi)容更加符合人類價(jià)值觀。

RLHF的三個(gè)階段
基于 LLaMA 模型,Colossal-AI 首個(gè)開(kāi)源包含完整 RLHF 流程的類Chat模型復(fù)現(xiàn)方案 ColossalChat,是目前最接近 ChatGPT 原始技術(shù)路線的實(shí)用開(kāi)源項(xiàng)目!
訓(xùn)練數(shù)據(jù)集開(kāi)源
ColossalChat 開(kāi)源了包含約 10 萬(wàn)條問(wèn)答的中、英雙語(yǔ)數(shù)據(jù)集。該數(shù)據(jù)集收集并清洗了社交平臺(tái)上人們的真實(shí)提問(wèn)場(chǎng)景作為種子數(shù)據(jù)集,利用 self-instruct 技術(shù)擴(kuò)充數(shù)據(jù),花費(fèi)約 900 美元進(jìn)行標(biāo)注。對(duì)比其他 self-instruct 方法生成的數(shù)據(jù)集,該數(shù)據(jù)集的種子數(shù)據(jù)更加真實(shí)、豐富,生成的數(shù)據(jù)集涵蓋的話題更多。該數(shù)據(jù)可以同時(shí)用于微調(diào)和 RLHF 訓(xùn)練。通過(guò)高質(zhì)量的數(shù)據(jù),ColossalChat 能進(jìn)行更好地對(duì)話交互,同時(shí)支持中文。

ColossalChat 數(shù)據(jù)集收集流程
RLHF算法復(fù)現(xiàn)
RLHF-Stage1 是 supervised-fintuning,即使用上文提到的數(shù)據(jù)集進(jìn)行模型微調(diào)。
RLHF-Stage2 訓(xùn)練了獎(jiǎng)勵(lì)模型,它通過(guò)對(duì)于同一個(gè) prompt 的不同輸出進(jìn)行人工排序,得到對(duì)應(yīng)分?jǐn)?shù),監(jiān)督訓(xùn)練獎(jiǎng)勵(lì)模型。
RLHF-Stage3 使用了強(qiáng)化學(xué)習(xí)算法,是訓(xùn)練流程中最復(fù)雜的一部分:

RLHF-Stage3算法流程圖
在 PPO 部分,ColossalChat 分為兩個(gè)階段進(jìn)行:首先是 Make Experience 部分,利用 SFT 、Actor、RM、Critic 模型計(jì)算生成 Experience 存入 buffer 中;之后是參數(shù)更新部分,利用 Experience 計(jì)算策略損失和價(jià)值損失。
在 PTX 部分,ColossalChat 計(jì)算 Actor 輸出 response 和輸入語(yǔ)料的回答部分的交叉熵?fù)p失函數(shù),用來(lái)在 PPO 梯度中加入預(yù)訓(xùn)練梯度,以保持語(yǔ)言模型原有性能防止遺忘。最后將策略損失、價(jià)值損失和 PTX 損失加和進(jìn)行反向傳播和參數(shù)更新。
快速上手
ColossalChat 開(kāi)源了基于 LLaMA 模型,復(fù)現(xiàn)訓(xùn)練 ChatGPT 三個(gè)階段的完整代碼。
第一階段,訓(xùn)練 SFT 模型:
#?Training?with?a?4-GPU?servers
colossalai?run?--nproc_per_node=4?train_sft.py?\
????--pretrain?"/path/to/LLaMa-7B/"?\
????--model?'llama'?\
????--strategy?colossalai_zero2?\
????--log_interval?10?\
????--save_path??/path/to/Coati-7B?\
????--dataset?/path/to/data.json?\
????--batch_size?4?\
????--accimulation_steps?8?\
????--lr?2e-5
第二階段,訓(xùn)練獎(jiǎng)勵(lì)模型:
#?Training?with?a?4-GPU?servers
colossalai?run?--nproc_per_node=4?train_reward_model.py?\
????--pretrain?"/path/to/LLaMa-7B/"?\
????--model?'llama'?\
????--strategy?colossalai_zero2?\
????--dataset?/path/to/datasets
第三階段,使用 RL 訓(xùn)練:
#?Training?with?a?8-GPU?servers
colossalai?run?--nproc_per_node=8?train_prompts.py?prompts.csv?\
????--strategy?colossalai_zero2?\
????--pretrain?"/path/to/Coati-7B"?\
????--model?'llama'?\
????--pretrain_dataset?/path/to/dataset
在獲得最終模型權(quán)重后,還可通過(guò)量化降低推理硬件成本,并啟動(dòng)在線推理服務(wù),僅需單張約 4GB 顯存的 GPU 即可完成 70 億參數(shù)模型推理服務(wù)部署。
python?server.py?/path/to/pretrained?--quant?4bit?--gptq_checkpoint?/path/to/coati-7b-4bit-128g.pt?--gptq_group_size?128
系統(tǒng)性能優(yōu)化與開(kāi)發(fā)加速
ColossalChat 能夠快速跟進(jìn) ChatGPT 完整 RLHF 流程復(fù)現(xiàn),離不開(kāi) AI 大模型基礎(chǔ)設(shè)施 Colossal-AI 及相關(guān)優(yōu)化技術(shù)的底座支持,相同條件下訓(xùn)練速度相比 Alpaca 采用的 FSDP(Fully Sharded Data Parallel)?可提升三倍左右。
系統(tǒng)基礎(chǔ)設(shè)施?Colossal-AI
AI 大模型開(kāi)發(fā)系統(tǒng) Colossal-AI 為該方案提供了基礎(chǔ)支持,它可基于 PyTorch 高效快速部署 AI 大模型訓(xùn)練和推理,從而降低 AI 大模型應(yīng)用的成本。Colossal-AI 由加州伯克利大學(xué)杰出教授 James Demmel 和新加坡國(guó)立大學(xué)校長(zhǎng)青年教授尤洋領(lǐng)導(dǎo)開(kāi)發(fā)。自從它開(kāi)源以來(lái),Colossal-AI 已經(jīng)多次在 GitHub 熱榜位列世界第一,獲得 GitHub Star 約兩萬(wàn)顆,并成功入選 SC、AAAI、PPoPP、CVPR、ISC 等國(guó)際 AI 與 HPC 頂級(jí)會(huì)議的官方教程。
減少內(nèi)存冗余的?ZeRO + Gemini
Colossal-AI 支持使用無(wú)冗余優(yōu)化器 (ZeRO) 提高內(nèi)存使用效率,低成本容納更大模型,同時(shí)不影響計(jì)算粒度和通信效率。自動(dòng) Chunk 機(jī)制可以進(jìn)一步提升 ZeRO 的性能,提高內(nèi)存使用效率,減少通信次數(shù)并避免內(nèi)存碎片。異構(gòu)內(nèi)存空間管理器 Gemini 支持將優(yōu)化器狀態(tài)從 GPU 顯存卸載到 CPU 內(nèi)存或硬盤(pán)空間,以突破 GPU 顯存容量限制,擴(kuò)展可訓(xùn)練模型的規(guī)模,降低 AI 大模型應(yīng)用成本。
使用?LoRA?低成本微調(diào)
Colossal-AI 支持使用低秩矩陣微調(diào)(LoRA)方法,對(duì) AI 大模型進(jìn)行低成本微調(diào)。LoRA 方法認(rèn)為大語(yǔ)言模型是過(guò)參數(shù)化的,而在微調(diào)時(shí),參數(shù)改變量是一個(gè)低秩矩陣。因此,可以將這個(gè)矩陣分解為兩個(gè)更小的矩陣的乘積。在微調(diào)過(guò)程中,大模型的參數(shù)被固定,只有低秩矩陣參數(shù)被調(diào)整,從而顯著減小了訓(xùn)練所需的參數(shù)量,并降低成本。
低成本量化推理

GPTQ量化
為降低推理部署成本,Colossal-AI 使用 GPTQ 4bit 量化推理。在 GPT/OPT/BLOOM 類模型上,它比傳統(tǒng)的RTN(rount-to-nearest) 量化技術(shù)能夠獲得更好的 Perplexity 效果。相比常見(jiàn)的 FP16 推理,它可將顯存消耗降低75%,只損失極少量的吞吐速度與 Perplexity 性能。
以 ColossalChat-7B 為例,在使用 4bit 量化推理時(shí),70 億參數(shù)模型僅需大約 4GB 顯存即可完成短序列(生成長(zhǎng)度為 128 )推理,在普通消費(fèi)級(jí)顯卡上即可完成(例如 RTX 3060 Laptop),僅需一行代碼即可使用。
if?args.quant?==?'4bit':
????model?=?load_quant(args.pretrained,?args.gptq_checkpoint,?4,?args.gptq_group_size)
如果采用高效的異步卸載技術(shù)(offload),還可以進(jìn)一步降低顯存要求,使用更低成本的硬件推理更大的模型。
ColossalChat和Alpaca的區(qū)別
1. ColossalChat開(kāi)源了第一個(gè)完整的RLHF pipeline,斯坦福Alpaca沒(méi)有做RLHF,也就是沒(méi)有做Stage 2 和Stage 3。
2. ColossalChat采用了更多的指令數(shù)據(jù),質(zhì)量更好,范圍更大,并使用強(qiáng)化學(xué)習(xí)做alignment使回答更接近人類。
3. ColossalChat訓(xùn)練流程集成了ColossalAI的諸多系統(tǒng)優(yōu)化,同等數(shù)據(jù)集和模型大小我們的訓(xùn)練速度可以比Alpaca的代碼快3倍左右,讓科研人員和中小企業(yè)也能獨(dú)立訓(xùn)練部署自己的會(huì)話系統(tǒng)。?
4.ColossalChat團(tuán)隊(duì)自己采集了更多數(shù)據(jù)集:訓(xùn)練的英文一共 24M tokens,中文大約 30M tokens,總共約 54M tokens。其中ColossalChat自己收集的數(shù)據(jù)集英文 6M,中文 18M tokens。
以下是ColossalChat和Alpaca在語(yǔ)言對(duì)話上的一些表現(xiàn) (上面是ColossalChat,下面是Alpaca)。
用Python寫(xiě)Quicksort ↓?↓?↓

給教授寫(xiě)郵件請(qǐng)求推薦信↓?↓?↓

開(kāi)放協(xié)作
盡管已經(jīng)進(jìn)一步引入RLHF,但由于算力和數(shù)據(jù)集有限,在部分場(chǎng)景下的實(shí)際性能仍有提升空間。

幸運(yùn)的是,不同以往 AI 大模型與前沿技術(shù)僅由少數(shù)科技巨頭壟斷,PyTorch、Hugging Face 和 OpenAI 等開(kāi)源社區(qū)與初創(chuàng)企業(yè)在本輪浪潮中也起到了關(guān)鍵作用。借鑒開(kāi)源社區(qū)的成功經(jīng)驗(yàn),Colossal-AI 歡迎各方參與共建,擁抱大模型時(shí)代!