編輯:編輯部
【新智元導讀】GPT-4又出業内爆料了!參數、架構、訓練資料集、token、訓練和推理成本……一次爆了個全。而鑒于作者此前的戰績,這份爆料确實具有一定的參考價值。
就在剛剛,OpenAI的GPT-4又被業内人士「開源」了!
其中包括GPT-4的架構、訓練和推理的基礎設施、參數量、訓練資料集、token數、成本、混合專家模型(Mixture of Experts,MoE)等非常具體的參數和資訊。
尤其是,在不同工程背後,OpenAI究竟是怎樣權衡的。以及在巨型模型推理時,如何跨越其中最大的瓶頸。
如此重磅的爆料,出自何許人也?
文章作者,是SemiAnalysis的兩位名叫Dylan Patel和Gerald Wong的撰稿人。
值得一提的是,此前曾在業内引起軒然大波的谷歌内部檔案洩漏事件(「我們沒有護城河,OpenAI也沒有」),作者之一同樣是Dylan Patel。
而DeepMind CEO Hassabis近日在外媒The Verge的采訪中,确認了這份谷歌工程師洩漏檔案的真實性。
可見,Dylan Patel的确有一些特殊管道,這就讓今日這份爆料的真實性又提高了幾分。
出門問問CEO李志飛對此也發表了感言
很多企業都能做出GPT-4
在爆料文章作者看來,OpenAI之是以不open,不是為了確定人類不被AI毀滅,而是因為他們建構的東西是可複制的。
他甚至預計,未來所有中國和美國的網際網路大廠或者AI頭部初創企業,都會有能力建構出和GPT-4一樣,甚至是超過GPT-4的模型。
但他同時也承認,GPT-4是OpenAI的偉大傑作。它凝結了工程師的匠心設計,複雜的構架和各種巧妙的工程上的取舍。
而OpenAI最持久的護城河,是他們擁有真實使用者的使用回報,業内最頂尖的工程人才,以及先發優勢帶來的持續領先地位。
模型架構
首先爆料作者認為,GPT-4在120層中總共包含了1.8萬億參數,而GPT-3隻有約1750億個參數。
也就是說,GPT-4的規模是GPT-3的10倍以上。
此前網上流傳的說法是,GPT-4的參數是1萬億,看來離實際情況還是低估了
為了保持合理的成本,OpenAI采用了MoE模型來進行建構。
具體而言,GPT-4擁有16個專家模型,每個MLP專家大約有1110億個參數。其中,有兩個專家模型被用于前向傳播。
雖然文獻中大量讨論了選擇每個token指向哪些專家的進階算法,但是據說,OpenAI用于GPT-4的算法,其實非常簡單。
此外,模型中還有大約550億個參數,被用做注意力機制的共享。
在每次的前向傳播推理(生成一個token)中,GPT-4隻需要使用大約2800億參數和560TFLOPs。
這與很多純密集模型每次前向傳播需要大約1.8萬億參數和3700TFLOPs形成了鮮明的對比。
資料集的構成
OpenAI用13萬億的token訓出了GPT-4。
這個資料集不單單是包含了13萬億的token,而且因為沒有高品質的token,這個資料集還包含了許多個epoch。
在Scale AI和資料集内部,還包含了數百萬行的指令微調資料。
不過爆料作者說,在這些RLHF資料上,他們并沒有找到太多資訊。
在預訓練階段的上下文長度達到了8K(seqlen),而32k的版本是基于預訓練後的8K版本微調而來的。
批大小在叢集中是幾天之内逐漸增加的,最終OpenAI使用的批大小為6000萬。
當然,這「隻是」每個750萬token的專家模型的大小,因為不是每個專家模型都會看到全部的token。
并行政策
并行政策對于A100GPU是相當重要的。
OpenAI采用了8路張量并行,因為NVLink最高隻支援這麼多。
但除此之外,爆料作者聽說OpenAI采用15路并行管線。
理論上,考慮到資料通信和計算時間,15個管線就有些多了。
但是因為受到記憶體容量的限制,這麼多的管線就是有意義的了。
當純管線和張量并行時,每個GPU的FP16參數大約是30GB。
但是一旦加上了KV緩存和成本,如果OpenAI使用的GPU大部分是40GB的A100,那這樣的構架在理論上就是有意義的。
可能OpenAI使用的是ZeRo Stage 1,并且可能使用的是塊級FSDP或者是混合共享資料并行。
為什麼他們沒有使用FSDP的全模型呢?可能是因為過高的通信成本。
雖然OpenAI大多數節點之間都有高速網絡,但是沒有覆寫所有的節點。
其中,至少有一些叢集的連接配接帶寬會比其他的叢集低很多。
但是作者表示,他并不是太明白OpenAI在如此高的管線并行度下,如何避免在每批中産生如下圖這樣的「泡泡」(huge bubbles),很有可能OpenAI就是生生地抗下了這些成本。
訓練成本
OpenAI訓練GPT-4的FLOPS約為2.15e25,在大約25000個A100上訓練了90到100天,使用率在32%到36%之間。
這種極低的使用率,部分原因是故障數量過多,這就會導緻需要重新從之前的檢查點開始訓練。比如上面提到的氣泡成本。
這種情況浪費的訓練成本極高。
另一個原因是這麼多GPU之間的all-reduce非常昂貴。
此圖表假設,無法融合每個操作、注意力機制所需的記憶體帶寬、硬體開銷相當于參數讀取,都會導緻效率低下。實際上,即使使用優化的庫,比如英偉達的FasterTransformrmer庫,總開銷甚至還會更大
爆料作者懷疑,如果這種叢集實際上是一群具有較弱網絡連接配接的較小叢集構成的,那麼叢集不同部分之間的非阻斷(non-block)連接配接速度為800G/1.6T,但這些部分之間的連接配接速度僅為200G/400G。
如果OpenAI雲計算的成本是差不多1美元/每A100小時的話,那麼在這樣的條件下,訓練成本大約是6300萬美元。
這還不包括所有的實驗、失敗的訓練和其他成本,比如資料收集、RLHF、人力成本等。
如果考慮到剛剛說的這些因素,真實成本要高得多的多。
此外,這還得是在能别人買得到晶片/網絡/資料中心,承擔資本支出組建了這些系統,并将它們租給OpenAI的前提下。
但是放到今天,在2美元/每H100小時的條件下,預訓練可以在大約8,192個H100上進行,隻需要55天,費用為2150萬美元。
上圖顯示了一些已公開的先進模型各自的參數數量和token。圖中的線是谷歌DeepMind的Chinchilla縮放觀測值(平滑了較大的誤差條),線上的每一點都顯示了使用該參數和token數訓練模型所需的理論FLOPS
不過,爆料作者稱到今年年底,至少将會有9個公司擁有超過上述大小的H100叢集。
雖然并非所有這些公司都會将它們全部用于單個模型訓練,但如果有公司這樣做的話,他們将擁有比GPT-4更大的模型。
比如Meta到今年年底将擁有超過100,000個H100,但其中相當一部分将分布在自己的資料中心進行推理。
但是它最大的單個叢集仍将超過25,000個H100。
總之,到今年年底,許多公司都會擁有足夠的算力資源,來訓練GPT-4大小的模型。
本表是在英偉達A100上訓練模型的理論最佳成本,沒有考慮所需的人力、ML Ops工具、資料收集/預處理、故障恢複、one-shot/few-shot學習示例、推理等,許多部分的成本高得驚人
混合專家模型方面的權衡
MoE(混合專家模型)是一種在推理過程中減少參數量的很好方法,雖然同時會增加參數量。
但是這對于每個訓練标記來編碼更多資訊是必要的,因為擷取足夠高品質的标記非常困難。
如果OpenAI真的想追求最佳性能,他們需要訓練兩倍的token才能達到。
話雖如此,OpenAI還是做出了不少的取舍。
例如,在推理過程中處理MoE非常困難,因為模型的每個部分并不在每個token生成時都被使用。
這意味着有些部分可能處于休眠狀态,而其他部分在工作。
當為使用者提供服務時,這種情況會大大降低使用率。
研究人員已經證明,使用64-128個專家模型比使用16個專家模型能夠獲得更好的損失情況,但這僅僅是研究結果。
采用相對比較少的專家模型的原因很多,OpenAI選擇16個專家的原因之一是因為在許多任務上更多的專家模型很難泛化。
使用更多的專家模型也更難實作收斂。
在如此龐大的訓練過程中,OpenAI選擇在專家模型數量上反而更為保守。
此外,使用較少的專家模型還有助于他們的推理基礎架構。在切換到混合專家模型推理架構時,存在各種困難的取舍和權衡。
爆料作者從對LLM推理的基本取舍開始讨論,然後再讨論OpenAI面臨的問題和他們所做的選擇。
推理權衡
在介紹推理權衡之前,順帶提一下,爆料者與所有的LLM公司交談過後,發現英偉達的FasterTransformer推理庫非常糟糕,TensorRT更是如此。
這意味着,如果英偉達不修改,人們還需要從頭開始建立自己的解決方案。
推理大型語言模型有三個主要的權衡,即批大小(同時處理使用者數)次元和使用的晶片數量,具體如下:
1. 延遲
模型必須在合理的延遲時間内做出響應。誰也不想在聊天APP中等待幾秒鐘才開始收到輸出。預填(輸入token)和解碼(輸出token)的處理時間各不相同。
2. 吞吐量
模型必須以每秒輸出一定數量的token。人類大約需要每秒30個token。對于其他各種用例,較低和較高的吞吐量都可以接受。
3. 使用率
運作模型的硬體必須實作高使用率,否則成本過高。雖然更高的延遲和較低的吞吐量,可以用來将更多使用者請求組合在一起,進而實作更高的使用率,但也會增加難度。
LLM推理的關鍵是平衡記憶體帶寬和計算這兩個要點。
LLM理論帶寬要求:經假設可得出,在iPhone 14上可跑的最大模型大小為~10億個FP16參數,或~40億個int4參數,這是基于智能手機的LLM的基本限制,任何更大的模型會無法被采用
簡單來講,每個參數都必須被讀取,并且與之相關的有2個FLOP。
是以,大多數晶片的比率(H100 SXM僅有3TB/s記憶體帶寬,但FP8有2,000 TFLOP/s)在批大小為1的推理中完全是不平衡的。
如果隻有一個使用者(批大小為1),那麼在每次生成token時,為了讀取每個參數所需的記憶體帶寬,會主要占據推理時間,而計算時間幾乎可以忽略不計。
為了将大型語言模型高效地擴充到多個使用者,批處理大小必須超過1。多個使用者将參數讀取成本分攤。例如,在批大小為256/512時,每個位元組的記憶體讀取可以獲得512 FLOP/s或1024 FLOP/s。
這個比率更接近H100的記憶體帶寬與FLOPS之間的平衡。這有助于實作更高的使用率,但代價是更高的延遲。
很多人認為記憶體容量是LLM推理的一個主要瓶頸,因為大型模型需要多個晶片進行推理,而較高的記憶體容量意味着它們可以适應較少的晶片。
然而,實際上更好的方法是使用更多的晶片,以便将延遲降低,增加吞吐量,并且可以使用更大的批大小以實作更高的使用率。
GPT-4推理權衡和基礎設施
以上所提到的,對GPT-4推理來說非常困難。但是作為一個MoE模型,再次引入了一系列全新的困難。
每個生成token的前向傳遞可以路由到不同的專家組。這對在較大的批大小下的吞吐量、延遲和使用率之間的權衡造成了困擾。
OpenAI的GPT-4有16個專家,每個前向傳遞路由到其中2個專家。
這意味着如果批大小為8,每個專家的參數讀取可能隻有批大小為1。
更糟糕的是,這可能意味着一個專家的批大小為8,而其他專家的批大小為4、1或0。
每個生成token,路由算法都會将前向傳遞發送到不同的方向,導緻token之間的延遲和專家批大小顯著變化。
推理基礎設施是OpenAI選擇較少數量的專家的主要原因之一。如果他們選擇更多的專家,記憶體帶寬會成為推理的瓶頸。
OpenAI的推理叢集通常可以達到4k+的批大小,這意味着即使在專家之間實作最佳的load平衡,專家的批大小也隻有大約500左右。這需要非常大量的使用才能實作。
爆料者稱,我們了解到OpenAI在一個由128個GPU組成的叢集上進行推理。他們在多個資料中心和地理位置上都有多個這樣的叢集。
推理采用8路張量并行和16路管線并行。每個由8個GPU組成的節點隻有約130B的參數,或者在FP16下每個GPU不到30GB,在FP8/int8下不到15GB。
這樣可以在40GB的A100上運作推理,隻要所有批的KV緩存大小不會過大。
不同節點上的包含不同專家的層不會被分割,因為那樣會導緻網絡流量過于不規則,而在每個生成token之間重新計算KV緩存的代價太高。
對于未來的MoE模型擴充和條件路由,最大的困難是如何處理KV緩存的路由。
模型的層數為120,是以可以簡單地将它們配置設定給15個不同的節點,但是因為第一個節點需要進行資料加載和嵌入,是以在推理叢集的主節點上放置較少的層是有意義的。
此外,有一些關于「推測解碼」(後續)的傳聞,這也解釋了為什麼主節點需要包含較少的層。
推理成本
與擁有1750億參數的Davinchi模型相比,GPT-4的成本是其3倍,盡管其前饋參數隻增加了1.6倍。
這主要是因為GPT-4需要更大的叢集,并且實作的使用率更低。
作者認為,在128個A100上推理GPT-4的8k序列長度每1,000個标記的成本為0.0049美元,而在128個H100上推理GPT-4的8k序列長度每1,000個标記的成本為0.0021美元。
需要注意的是,這是假設有相當高的使用率,并保持較高批大小的情況下。
但很明顯,OpenAI有時的使用率非常低。
對此作者假設,OpenAI會在低峰時段關閉叢集,重新配置節點,恢複訓練較小的測試模型,并嘗試各種新技術,進而降低推理成本。
如果OpenAI不這樣做,他們的使用率會更低,而成本也将增加一倍以上。
多查詢注意力
除此之外,OpenAI也在使用多查詢注意力(Multi-Query Attention,MQA)。
論文位址:https://arxiv.org/pdf/1911.02150.pdf
簡而言之,隻需要一個注意力頭,并且可以顯著減少KV緩存的記憶體占用。
即便如此,32k長度的GPT-4肯定無法在40GB的A100上運作,而8k的最大批大小也有上限。
連續批處理
OpenAI實作了可變批大小和連續批處理。
這樣做可以允許一定程度的最大延遲,并優化推理成本。
推測解碼(Speculative Decoding)
爆料稱,OpenAI在GPT-4的推理過程中使用了「推測解碼」,這其中還有100%的不确定性。
token到token的延遲變化,以及在進行簡單的檢索任務和更複雜的任務時差異,似乎表明這一點是可能的,不過還是有太多的變量無法确定。
在此,爆料者通過DeepMind的一項研究「Accelerating LLM Inference with Staged Speculative Decoding」中的文本,進行了适當修改/添加一些細節,進行了解釋。
使用LLM通常分為兩個階段。
首先是預填充(prefill),将提示文本輸入模型中以生成KV緩存和第一個輸出的對數幾率(可能的token輸出的機率分布)。這個過程通常很快,因為整個提示文本可以并行處理。
第二個階段是解碼(decoding)。從輸出的對數幾率中選擇一個token,并将其回報到模型中,模型将生成下一個token的對數幾率。重複這個過程,直到生成所需數量的token。
由于解碼必須按順序進行,每次都需要将權重流通過計算單元以生成單個token。是以當以小量批運作時,這個第二階段的計算密集度(即計算FLOP/記憶體帶寬的位元組數)非常低。是以,解碼通常是自回歸生成中最昂貴的部分。
這就是為什麼OpenAI的API調用中,輸入token比輸出token便宜得多的原因。
「推測解碼」的基本思想是使用一個更小、更快的草案模型提前解碼多個token,然後将它們作為一個批輸入到預測模型中。
如果草案模型的預測是正确的,即更大的模型也同意這些預測,那麼可以使用單個批解碼多個token,這樣可以節省大量的記憶體帶寬和時間。
然而,如果更大的模型拒絕了草案模型預測的token,則剩餘的批将被丢棄,算法自然會恢複到标準的逐個token解碼。
「推測解碼」可能還伴随着拒絕抽樣的方案,以從原始分布中進行采樣。值得注意的是,這僅在帶寬是瓶頸的小批設定中有用。
「推測解碼」以計算換取帶寬,而成為一個有吸引力的性能工程目标有兩個關鍵原因:
首先,它不會降低模型品質。其次,它提供的性能改進通常與其他方法正交,因為其性能來自于将「順序執行」轉換為「并行執行」。
目前的推測方法為批預測的單獨序列。然而,這種方法不能很好地拓展到大量的批,或低草案模型對齊上。
直覺地說,兩個模型在連續長序列的token上達成一緻的機率呈指數級低,這意味着随着算術密度的增加,推測解碼的收益會迅速減少。
爆料者認為,如果OpenAI使用「推測解碼」,他們可能隻在大約4個token的序列中使用。
順便提一句,有關OpenAI閹割,而導緻GPT-4品質降低的整個陰謀,可能隻是因為他們讓預測模型接受了「推測解碼」模型的低機率序列。
另外有人推測,Bard也使用了「推測解碼」,因為谷歌在将整個序列發送給使用者之前會等待其完全生成,但在爆料者認為,這種猜測是完全不正确的。
視覺多模态
視覺多模态能力是GPT-4中最不令人印象深刻的部分,至少與領先的研究相比是如此。
當然,現在還沒有人将多模态LLM的研究成果商業化。
爆料者稱,它是一個獨于文本編碼器的視覺編碼器,還有交叉注意力,架構類似于Flamingo,并在GPT-4 1.8T上增加了更多參數。
GPT-4多模态能力是在文本預訓練之後,又用大約2萬億token進⾏了微調。
據稱,在視覺模型上,OpenAI原本希望從頭開始訓練,但因其不夠成熟,無奈從文本訓練模型進行微調。
而下一代模型GPT-5,其訓練應該從零開始訓練視覺模型,并且能夠生成圖像,甚至生成音頻。
這樣的視覺能力主要目的之一,讓自主智能體能夠閱讀網頁,并轉錄圖像,視訊中的内容。
值得一提的是,OpenAI用來訓練多模态模型的資料包括:「聯合資料」(LaTeX/文本)、網頁螢幕截圖、YouTube視訊(采樣幀,以及運作Whisper擷取字幕)。
關于LLM的過度優化,一個有趣的事實是視覺模型的IO成本不同于文本模型。在視覺模型中,資料加載IO大約是文本模型的150倍。
視覺模型的IO成本很低
視覺模型中的每個token 600位元組,文本是4位元組/token。
是以這需要在圖像壓縮方面做很多工作。這對于硬體供應商來說極為重要,因為他們正在圍繞LLM的用例和比率優化2-3年後的硬體。
他們可能會發現自己身處的世界中,每個模型都具有強大的視覺和音頻功能。
他們可能會發現自己的架構适應性會很差。
總的來說,架構肯定會超越我們今天看到的基于文本簡化的密集模型,和MoE模型。
參考資料:
https://www.semianalysis.com/p/gpt-4-architecture-infrastructure