模仿Jeff Dean神總結(jié),前谷歌工程師分享「LLM開發(fā)秘籍」:每個(gè)開發(fā)者都應(yīng)知道的數(shù)字!
最近,一位網(wǎng)友整理了一份「每個(gè)LLM開發(fā)者都應(yīng)該知道的數(shù)字」,同時(shí)解釋了這些數(shù)字為何重要,以及我們應(yīng)該如何利用它們。
他在谷歌的時(shí)候,就有一份由傳奇工程師Jeff Dean整理的文件,叫做「每個(gè)工程師都應(yīng)該知道的數(shù)字」。
Jeff Dean:「每個(gè)工程師都應(yīng)該知道的數(shù)字」
而對(duì)于LLM(Large Language Model)開發(fā)者來說,有一組類似的用于粗略估算的數(shù)字也是非常有用的。
Prompt
40-90%:在提示中添加「簡明扼要」之后節(jié)省的成本
要知道,你是按照LLM在輸出時(shí)用掉的token來付費(fèi)的。
這意味著,讓模型簡明扼要(be concise)地進(jìn)行表述,可以省下很多錢。
與此同時(shí),這個(gè)理念還可以擴(kuò)展到更多地方。
比如,你本來想用GPT-4生成10個(gè)備選方案,現(xiàn)在也許可以先要求它提供5個(gè),就可以留下另一半的錢了。
1.3:每個(gè)詞的平均token數(shù)
LLM是以token為單位進(jìn)行操作的。
而token是單詞或單詞的子部分,比如「eating」可能被分解成兩個(gè)token「eat」和「ing」。
一般來說,750個(gè)英文單詞將產(chǎn)生大約1000個(gè)token。
對(duì)于英語以外的語言,每個(gè)詞的token會(huì)有所增加,具體數(shù)量取決于它們?cè)贚LM的嵌入語料庫中的通用性。
價(jià)格
考慮到LLM的使用成本很高,因此和價(jià)格相關(guān)的數(shù)字就變得尤為重要了。
~50:GPT-4與GPT-3.5 Turbo的成本比
使用GPT-3.5-Turbo大約比GPT-4便宜50倍。說「大約」是因?yàn)镚PT-4對(duì)提示和生成的收費(fèi)方式不同。
所以在實(shí)際應(yīng)用時(shí),最好確認(rèn)一下GPT-3.5-Turbo是不是就足夠完成你的需求。
例如,對(duì)于概括總結(jié)這樣的任務(wù),GPT-3.5-Turbo綽綽有余。
5:使用GPT-3.5-Turbo與OpenAI嵌入進(jìn)行文本生成的成本比
這意味著在向量存儲(chǔ)系統(tǒng)中查找某個(gè)內(nèi)容比使用用LLM生成要便宜得多。
具體來說,在神經(jīng)信息檢索系統(tǒng)中查找,比向GPT-3.5-Turbo提問要少花約5倍的費(fèi)用。與GPT-4相比,成本差距更是高達(dá)250倍!
10:OpenAI嵌入與自我托管嵌入的成本比
注意:這個(gè)數(shù)字對(duì)負(fù)載和嵌入的批大小非常敏感,因此請(qǐng)將其視為近似值。
通過g4dn.4xlarge(按需價(jià)格:1.20美元/小時(shí)),我們可以利用用HuggingFace的SentenceTransformers(與OpenAI的嵌入相當(dāng))以每秒約9000個(gè)token的速度進(jìn)行嵌入。
在這種速度和節(jié)點(diǎn)類型下進(jìn)行一些基本的計(jì)算,表明自我托管的嵌入可以便宜10倍。
6:OpenAI基礎(chǔ)模型與微調(diào)模型查詢的成本比
在OpenAI上,微調(diào)模型的成本是基礎(chǔ)模型的6倍。
這也意味著,相比微調(diào)定制模型,調(diào)整基礎(chǔ)模型的提示更具成本效益。
1:自我托管基礎(chǔ)模型與微調(diào)模型查詢的成本比
如果你自己托管模型,那么微調(diào)模型和基礎(chǔ)模型的成本幾乎相同:這兩種模型的參數(shù)數(shù)量是一樣的。
訓(xùn)練和微調(diào)
~100萬美元:在1.4萬億個(gè)token上訓(xùn)練130億參數(shù)模型的成本
論文地址:https://arxiv.org/pdf/2302.13971.pdf
LLaMa的論文中提到,他們花了21天的時(shí)間,使用了2048個(gè)A100 80GB GPU,才訓(xùn)練出了LLaMa模型。
假設(shè)我們?cè)赗ed Pajama訓(xùn)練集上訓(xùn)練自己的模型,假設(shè)一切正常,沒有任何崩潰,并且第一次就成功,就會(huì)得到上述的數(shù)字。
此外,這個(gè)過程還涉及到2048個(gè)GPU之間的協(xié)調(diào)。
大多數(shù)公司,并沒有條件做到這些。
不過,最關(guān)鍵的信息是:我們有可能訓(xùn)練出自己的LLM,只是這個(gè)過程并不便宜。
并且每次運(yùn)行,都需要好幾天時(shí)間。
相比之下,使用預(yù)訓(xùn)練模型,會(huì)便宜得多。
< 0.001:微調(diào)與從頭開始訓(xùn)練的成本費(fèi)率
這個(gè)數(shù)字有點(diǎn)籠統(tǒng),總的來說,微調(diào)的成本可以忽略不計(jì)。
例如,你可以用大約7美元的價(jià)格,微調(diào)一個(gè)6B參數(shù)的模型。
即使按照OpenAI對(duì)其最昂貴的微調(diào)模型Davinci的費(fèi)率,每1000個(gè)token也只要花費(fèi)3美分。
這意味著,如果要微調(diào)莎士比亞的全部作品(大約100萬個(gè)單詞),只需要花費(fèi)四五十美元。
不過,微調(diào)是一回事,從頭開始訓(xùn)練,就是另一回事了......
GPU顯存
如果您正在自托管模型,了解GPU顯存就非常重要,因?yàn)長LM正在將GPU的顯存推向極限。
以下統(tǒng)計(jì)信息專門用于推理。如果要進(jìn)行訓(xùn)練或微調(diào),就需要相當(dāng)多的顯存。
V100:16GB,A10G:24GB,A100:40/80GB:GPU顯存容量
了解不同類型的GPU的顯存量是很重要的,因?yàn)檫@將限制你的LLM可以擁有的參數(shù)量。
一般來說,我們喜歡使用A10G,因?yàn)樗鼈冊(cè)贏WS上的按需價(jià)格是每小時(shí)1.5到2美元,并且用有24G的GPU顯存,而每個(gè)A100的價(jià)格約為5美元/小時(shí)。
2x 參數(shù)量:LLM的典型GPU顯存要求
舉個(gè)例子,當(dāng)你擁有一個(gè)70億參數(shù)的模型時(shí),就需要大約14GB的GPU顯存。
這是因?yàn)榇蠖鄶?shù)情況下,每個(gè)參數(shù)需要一個(gè)16位浮點(diǎn)數(shù)(或2個(gè)字節(jié))。
通常不需要超過16位精度,但大多數(shù)時(shí)候,當(dāng)精度達(dá)到8位時(shí),分辨率就開始降低(在某些情況下,這也可以接受)。
當(dāng)然,也有一些項(xiàng)目改善了這種情況。比如llama.cpp就通過在6GB GPU上量化到4位(8位也可以),跑通了130億參數(shù)的模型,但這并不常見。
~1GB:嵌入模型的典型GPU顯存要求
每當(dāng)你嵌入語句(聚類、語義搜索和分類任務(wù)經(jīng)常要做的事)時(shí),你就需要一個(gè)像語句轉(zhuǎn)換器這樣的嵌入模型。OpenAI也有自己的商用嵌入模型。
通常不必?fù)?dān)心GPU上的顯存嵌入占用多少,它們相當(dāng)小,甚至可以在同一GPU上嵌入LLM。
>10x:通過批處理LLM請(qǐng)求,提高吞吐量
通過GPU運(yùn)行LLM查詢的延遲非常高:吞吐量為每秒0.2個(gè)查詢的話,延遲可能需要5秒。
有趣的是,如果你運(yùn)行兩個(gè)任務(wù),延遲可能只需要5.2秒。
這意味著,如果能將25個(gè)查詢捆綁在一起,則需要大約10秒的延遲,而吞吐量已提高到每秒2.5個(gè)查詢。
不過,請(qǐng)接著往下看。
~1 MB:130億參數(shù)模型輸出1個(gè)token所需的GPU顯存
你所需要的顯存與你想生成的最大token數(shù)量直接成正比。
比如,生成最多512個(gè)token(大約380個(gè)單詞)的輸出,就需要512MB的顯存。
你可能會(huì)說,這沒什么大不了的——我有24GB的顯存,512MB算什么?然而,如果你想運(yùn)行更大的batch,這個(gè)數(shù)值就會(huì)開始累加了。
比如,如果你想做16個(gè)batch,顯存就會(huì)直接增加到8GB。