當前位置: 妍妍網 > 碼農

史上第一個100%開源大模型重磅登場!破紀錄公開程式碼/權重/數據集/訓練全過程,AMD都能訓

2024-02-05碼農

轉自:新智元

編輯: 潤 好困

【新智元導讀】 艾倫人工智慧研究所等5機構最近公布了史上最全的開源模型「OLMo」,公開了模型的模型權重、完整訓練程式碼、數據集和訓練過程,為以後開源社群的工作設立了新的標桿。

多年來,語言模型一直是自然語言處理(NLP)技術的核心,考慮到模型背後的巨大商業價值,最大最先進的模型的技術細節都是不公開的。

現在,真·完全開源的大模型來了!

來自艾倫人工智慧研究所、華盛頓大學、耶魯大學、紐約大學和卡內基梅隆大學的研究人員,聯合發表了一項足以載入AI開源社群史冊的工作——

他們幾乎將從零開始訓練一個大模型過程中的一切數據和資料都開源了!

論文:https://allenai.org/olmo/olmo-paper.pdf

權重:https://huggingface.co/allenai/OLMo-7B

程式碼:https://github.com/allenai/OLMo

數據:https://huggingface.co/datasets/allenai/dolma

評估:https://github.com/allenai/OLMo-Eval

適配:https://github.com/allenai/open-instruct

具體來說,艾倫人工智慧研究所推出的這個開放大語言模型(Open Language Model,OLMo)實驗和訓練平台,則提供了一個完全開源的大模型,以及所有和訓練開發這個模型有關的數據和技術細節——

訓練和建模: 它包括完整的模型權重、訓練程式碼、訓練日誌、消融研究、訓練指標和推理程式碼。

預訓練語料: 一個包含了高達3T token的預訓練開源語料庫,以及產生這些訓練數據的程式碼。

模型參數: OLMo框架提供了四個不同架構、最佳化器和訓練硬體體系下的7B大小的模型,以及一個1B大小的模型,所有模型都在至少2T token上進行了訓練。

同時,也提供了用於模型推理的程式碼、訓練過程的各項指標以及訓練日誌。

7B:OLMo 7B、OLMo 7B (not annealed)、OLMo 7B-2T、OLMo-7B-Twin-2T

評估工具: 公開了開發過程中的評估工具套件,包括每個模型訓練過程中每1000 step中包含的超過500個的檢查點以及評估程式碼。

所有數據都在apache 2.0下授權使用(免費商用)。

如此徹底的開源,似乎是給開源社群打了個樣——以後不像我這樣開源的,就別說自己是開源模型了。

效能評估

從核心的評估結果來看,OLMo-7B與同類開源模型相比略勝一籌。

在前9項評測中,OLMo-7B有8項排名前三,其中有2項超越了其他所有模型。

在很多生成任務或閱讀理解任務(例如truthfulQA)上,OLMo-7B都超過了Llama 2,但在一些熱門的問答任務(如MMLU或Big-bench Hard)上表現則要差一些。

前9個任務是研究人員對預訓練模型的內部評估標準,而下面三個任務則是為了完善HuggingFace Open LLM排行榜而加入的

下圖展示了9個核心任務準確率的變化趨勢。

除了OBQA外,隨著OLMo-7B接受更多數據的訓練,幾乎所有任務的準確率都呈現上升趨勢。

與此同時,OLMo 1B與其同類模型的核心評估結果表明,OLMo與它們處於同一水平。

透過使用艾倫AI研究所的Paloma(一個基準測試)和可獲取的檢查點,研究人員分析了模型預測語言能力與模型規模因素(例如訓練的token數量)之間的關系。

可以看到,OLMo-7B在效能上與主流模型持平。其中,每字節位元數(Bits per Byte)越低越好。

透過這些分析,研究人員發現模型在處理不同資料來源時的效率差異較大,這主要取決於模型訓練數據與評估數據的相似度。

特別地,OLMo-7B在主要基於Common Crawl的資料來源上表現出色(比如C4)。

不過,在與網路抓取文本關系不大的資料來源上,如WikiText-103、M2D2 S2ORC和M2D2 Wikipedia,OLMo-7B與其他模型相比效率較低。

RedPajama的評估也體現了相似的趨勢,可能是因為它的7個領域中只有2個來源於Common Crawl,且Paloma對每個資料來源中的各個領域給予了相同的權重。

鑒於像Wikipedia和arXiv論文這樣的精選資料來源提供的異質數據遠不如網路抓取文本豐富,隨著預訓練數據集的不斷擴大,維持對這些語言分布的高效率會很更加困難。

OLMo架構

在模型的架構方面,團隊基於的是decoder-only的Transformer架構,並采用了PaLM和Llama使用的SwiGLU啟用函式,引入了旋轉位置嵌入技術(RoPE),並改進了GPT-NeoX-20B的基於字節對編碼(BPE)的分詞器,以減少模型輸出中的個人可辨識資訊。

此外,為了保證模型的穩定性,研究人員沒有使用偏置項(這一點與PaLM的處理方式相同)。

如下表所示,研究人員已經釋出了1B和7B兩個版本,同時還計劃很快推出一個65B的版本。

下表詳細比較了7B架構與這些其他模型在相似規模下的效能。

預訓練數據集:Dolma

雖然研究人員在獲取模型參數方面取得了一定的進展,但開源社群目前預訓練數據集的開放程度還遠遠不夠。

之前的預訓練數據往往不會隨著模型的開源而公開(閉源模型就更不用說了)。

而且有關這些數據的說明文件也常常缺乏足夠的細節,但是這些細節對於想要復現研究或完全理解相關工作至關重要。

這一情況加大了語言模型研究的難度——比如,了解訓練數據如何影響模型能力和其局限性。

為了推動語言模型預訓練領域的開放研究,研究人員構建並公開了預訓練數據集Dolma。

這是一個包含了從 7 種不同數據來源獲取的3萬億個token的多樣化、多源語料庫。

這些資料來源一方面在大規模語言模型預訓練中常見,另一方面也能被普通大眾所接觸。

下表給出了來自各個資料來源的數據量的概覽。

Dolma的構建過程包括六個步驟:語言過濾、品質過濾、內容過濾、去重、多源混合和token化。

在整理和最終釋出Dolma過程中,研究人員確保各資料來源的文件保持獨立。

他們還開源了一套高效的數據整理工具,這套工具能夠幫助進一步研究Dolma、復制成果,並簡化預訓練語料庫的整理工作。

此外,研究人員也開源了WIMBD工具,以助於數據集分析。

網路數據處理流程

程式碼處理流程

訓練OLMo


分布式訓練框架

研究人員利用PyTorch的FSDP框架和ZeRO最佳化器策略來訓練模型。這種方法透過將模型的權重和它們對應的最佳化器狀態在多個GPU中進行分割,從而有效減少了記憶體的使用量。

在處理高達7B規模的模型時,這項技術使研究人員能夠在每個GPU上處理4096個token的微批大小,以實作更高效的訓練。

對於OLMo-1B和7B模型,研究人員固定使用大約4M token(2048個數據例項,每個例項包含2048個token的序列)的全域批大小。

而對於目前正在訓練中的OLMo-65B模型,研究人員采用了一個批大小預熱策略,起始於大約2M token(1024個數據例項),之後每增加100B token,批大小翻倍,直至最終達到大約16M token(8192個數據例項)的規模。

為了加快模型訓練的速度,研究人員采用了混合精度訓練的技術,這一技術是透過FSDP的內部配置和PyTorch的amp模組來實作的。

這種方法特別設計,以確保一些關鍵的計算步驟(例如softmax函式)始終以最高精度執行,以保證訓練過程的穩定性。

與此同時,其他大部份計算則使用一種稱為bfloat16的半精度格式,以減少記憶體使用並提高計算效率。

在特定配置中,每個GPU上的模型權重和最佳化器狀態都以最高精度保存。

只有在執行模型的前向傳播和反向傳播,即計算模型的輸出和更新權重時,每個Transformer模組內的權重才會臨時轉換為bfloat16格式。

此外,各個GPU間同步梯度更新時,也會以最高精度進行,以確保訓練品質。

最佳化器

研究人員采用了AdamW最佳化器來調整模型參數。

無論模型規模大小如何,研究人員都會在訓練初期的5000步(大約處理21B個token)內逐漸增加學習率,這一過程稱為學習率預熱。

預熱結束後,學習率將按線性規律逐漸減少,直到降至最高學習率的十分之一。

此外,研究人員還會對模型參數的梯度進行裁剪,確保其總的 L1 範數不會超過 1.0。

在下表中,研究人員將自己在7B模型規模下的最佳化器配置與近期其他使用AdamW最佳化器的大型語言模型進行了對比。

數據集

研究人員利用開放數據集Dolma中的一個2T token的樣本,構建了他們的訓練數據集。

研究人員將每篇文件的token連線起來,每篇文件的末尾都會加上一個特殊的 EOS token,接著將這些 token 分成每組 2048 個,形成訓練樣本。

這些訓練樣本在每次訓練時都會以同樣的方式進行隨機打亂。研究人員還提供了一些工具,使得任何人都可以復原每個訓練批次的具體數據順序和組成。

研究人員已經釋出的所有模型至少都經過了一輪(2T token)的訓練。其中一些模型還進行了額外的訓練,即在數據上進行第二輪訓練,但采用了不同的隨機打亂順序。

根據之前的研究,這樣重復使用少量數據的影響是微乎其微的。

輝達和AMD都要YES!

為了確保程式碼庫能夠同時在輝達和AMD的GPU上都能高效執行,研究人員選擇了兩個不同的集群進行了模型訓練測試:

利用LUMI超級電腦,研究人員部署了最多256個節點,每個節點搭載了4張AMD MI250X GPU,每張GPU 擁有128GB記憶體和800Gbps的數據傳輸速率。

透過MosaicML (Databricks) 的支持,研究人員使用了27個節點,每個節點配備了8張輝達A100 GPU,每張GPU擁有40GB記憶體和800Gbps的數據傳輸速率。

雖然研究人員為了提高訓練效率對批大小進行了微調,但在完成2T token的評估後,兩個集群的效能幾乎沒有差異。

訓練能耗

總結

與以往大多數僅僅提供模型權重和推理程式碼的模型不同,研究人員開源了OLMo的全部內容,包括訓練數據、訓練和評估程式碼,以及訓練日誌、實驗結果、重要發現以及Weights & Biases的記錄等等。

此外,團隊正在研究如何透過指令最佳化和不同型別的強化學習(RLHF)來改進OLMo。而這些微調程式碼、數據和經過微調後的模型也都會被開源。

研究人員致力於持續支持和發展OLMo及其框架,推動開放語言模型(LM)的發展,助力開放研究社群的發展。為此,研究人員計劃引入更多不同規模的模型、多種模態、數據集、安全措施和評估方法,豐富OLMo家族。

他們希望透過今後持續進行的徹底開源工作,增強開源研究社群的力量,並引發新一輪的創新浪潮。

團隊介紹

Yizhong Wang(王義中)

Yizhong Wang是華盛頓大學Paul G. Allen電腦科學與工程學院的博士生,導師是Hannaneh Hajishirzi和Noah Smith。同時,也是艾倫人工智慧研究所的兼職研究實習生。

此前,他曾在Meta AI、微軟研究院和百度NLP進行實習。此前,他在北京大學獲得了碩士學位,在上海交通大學獲得了學士學位。

他的研究方向是自然語言處理(Natural Language Processing)、機器學習(Machine Learning),以及大語言模型(LLM)。

- LLM的適應力:如何更有效地構建和評估能夠跟隨指令的模型?在微調這些模型時,我們應該考慮哪些因素,它們又如何影響到模型的通用性?哪種型別的監督方式既有效又能擴充套件?

- LLM的持續學習:預訓練和微調之間的界限在哪裏?有哪些架構和學習策略能夠讓LLM在預訓練之後繼續前進演化?模型內部已有的知識如何與新學的知識交互作用?

- 大規模合成數據的套用:在生成模型迅速產生數據的今天,這些數據對我們的模型開發乃至整個互聯網和社會有何影響?我們如何確保能夠在大規模下生成多樣且高品質的數據?我們能否區分這些數據與人類生成的數據?

Yuling Gu

Yuling Gu是艾倫人工智慧研究所(AI2)Aristo團隊的一位研究員。

2020年,她在紐約大學(NYU)獲得學士學位。除了主修的電腦科學外,她還輔修了一個跨學科專業——語言與心智,這個專業結合了語言學、心理學和哲學。隨後,她在華盛頓大學(UW)獲得了碩士學位。

她對機器學習的技術和認知科學的理論的融合套用充滿了熱情。

參考資料:

https://allenai.org/olmo/olmo-paper.pdf