簡介
熟悉我的文章的讀者可能還記得我以前報道《課本就是你所需要的一切》(https://medium.com/@mgunton7/the-impact-of-better-data-on-llms-46153ba26795)時的情景,這是微軟的一篇論文,展示了高質(zhì)量的數(shù)據(jù)如何對模型性能產(chǎn)生巨大影響。文章中的新發(fā)現(xiàn)直接駁斥了模型必須巨大才能發(fā)揮作用的觀點。值得慶幸的是,這篇論文的研究人員一直在繼續(xù)他們的工作,最近又發(fā)表了一些讓我覺得非常令人興奮的東西。
他們發(fā)表的最新論文《Phi-3技術(shù)報告:手機本地運行的高性能語言模型》(https://arxiv.org/pdf/2404.14219)也許正解釋了相關(guān)的最大發(fā)現(xiàn)。
接下來,讓我們深入了解作者從Phi-2模型中改變了什么,他們是如何進行模型訓(xùn)練的,以及該模型在iPhone上是如何工作的。
關(guān)鍵術(shù)語
在深入了解上述模型的體系結(jié)構(gòu)之前,首先需要了解幾個關(guān)鍵概念。如果您已經(jīng)知道這些內(nèi)容,請隨時跳到下一節(jié)。
第一個關(guān)鍵概念是模型的參數(shù)(parameters),它是指模型在訓(xùn)練過程中學(xué)習(xí)的權(quán)重和偏差的數(shù)量。如果你有10億個參數(shù),那么你就有10億的權(quán)重和偏差來決定模型的性能。參數(shù)越多,神經(jīng)網(wǎng)絡(luò)就越復(fù)雜。第二個關(guān)鍵概念是頭(head),它是指轉(zhuǎn)換器中的自注意機制所具有的鍵、值和查詢向量的數(shù)量。第三個關(guān)鍵概念是層(layers),它是指轉(zhuǎn)換器的神經(jīng)網(wǎng)絡(luò)中存在的神經(jīng)段的數(shù)量;其中,隱藏維度是典型隱藏層中的神經(jīng)元數(shù)量。
此外,分詞器(Tokenizer)是一個軟件組件,它能夠把你的輸入文本轉(zhuǎn)換成一個嵌入,然后由轉(zhuǎn)換器使用它。詞匯大小(vocabulary size)是指在其上進行訓(xùn)練的模型的唯一符號的數(shù)量。轉(zhuǎn)換器的塊結(jié)構(gòu)(block structure)是指為特定模型選擇的層、頭、激活函數(shù)、分詞器和層規(guī)范化的組合。
圖片來自于論文“GOA:從多頭檢查點訓(xùn)練廣義的多查詢轉(zhuǎn)換器模型”(https://arxiv.org/pdf/2305.13245)
最后,還有一個重要術(shù)語是分組查詢注意力(GQA:Grouped-Query Attention),它是我們優(yōu)化多頭注意力以減少訓(xùn)練和推理過程中的計算開銷的一種方法。正如您從下圖中看到的,GQA采用了中間方法——我們采用了1:1:M的方法,而不是將1個值和1個鍵與1個查詢配對,其中許多比整個查詢都小。這樣做仍然可以從多查詢注意力(MQA)中獲得訓(xùn)練成本效益,同時最大限度地減少我們隨后看到的性能下降。
Phi 3體系架構(gòu)
讓我們從這個模型背后的體系架構(gòu)開始講起。研究人員發(fā)布了3種不同的僅包含解碼器的模型,分別是phi-3-mini、phi-3-small和phi-3-medium,每種模型都使用了不同的超參數(shù)。
phi-3-mini
- 38億個參數(shù)
- 32個頭
- 32個層
- 3072個隱藏尺寸
- 4k大小的符號默認上下文長度
- 詞匯量大小為32064
- 權(quán)重以bfloat16類型存儲
- 使用3.3萬億個符號進行訓(xùn)練
phi-3-small
- 70億個參數(shù)
- 32個頭
- 32個層
- 4096個隱藏維度
- 8k大小的符號默認上下文長度
- 詞匯量大小為100352
- 權(quán)重以bfloat16類型存儲
- 使用4.8萬億個符號進行訓(xùn)練
phi-3-medium
- 140億個參數(shù)
- 40個頭
- 40個層
- 3072個隱藏尺寸
- 使用4.8萬億個符號進行訓(xùn)練
現(xiàn)在,我們來比較一下它們一些差異。首先,phi-3-mini模型是使用典型的多頭注意力訓(xùn)練的。雖然論文中沒有提到,但讓我懷疑的是,由于該模型的大小大約是其他兩個模型的一半,因此與多頭相關(guān)的訓(xùn)練成本并不令人反感。當(dāng)然,當(dāng)它們擴展到phi-3-small時,使用的是分組查詢注意力,其中4個查詢連接到1個鍵。
此外,他們使phi-3-mini的嵌段結(jié)構(gòu)盡可能接近LLaMa-2結(jié)構(gòu)。這里的目標是允許開源社區(qū)繼續(xù)他們對LLaMa-2和Phi-3的研究。這對于進一步理解塊結(jié)構(gòu)的力量是有意義的。
然而,phi-3-small沒有使用LLaMa的塊結(jié)構(gòu),而是選擇使用Tiktoken分詞器,使用交替的密集注意力層和新的塊稀疏注意力層。此外,他們在這些模型的訓(xùn)練數(shù)據(jù)集中添加了10%的多語言數(shù)據(jù)。
訓(xùn)練和數(shù)據(jù)優(yōu)化組合
與Phi-2類似,研究人員主要投資于高質(zhì)量的數(shù)據(jù)。他們在生成數(shù)據(jù)來訓(xùn)練模型時使用了類似的“教育價值”范式,選擇使用比上次多得多的數(shù)據(jù)。他們分兩個階段創(chuàng)建數(shù)據(jù)。
第一階段涉及尋找他們發(fā)現(xiàn)對用戶具有高“教育價值”的網(wǎng)絡(luò)數(shù)據(jù)。這里的目標是為模型提供一般知識。然后,第二階段獲取第一階段數(shù)據(jù)的子集,并生成數(shù)據(jù),教導(dǎo)模型如何進行邏輯推理或獲得特定技能。
這里面的挑戰(zhàn)是,如何確保來自每個語料庫的數(shù)據(jù)組合適合正在訓(xùn)練的模型的規(guī)模(即phi-3-small與phi-3-mini)。這就是“數(shù)據(jù)優(yōu)化”機制背后的理念,在該機制中,您提供給LLM進行訓(xùn)練的數(shù)據(jù)為其塊結(jié)構(gòu)提供了最佳能力。換言之,如果你認為數(shù)據(jù)是訓(xùn)練一個好的LLM的關(guān)鍵區(qū)別,那么通過數(shù)據(jù)找到正確的技能組合來展示模型與找到好的數(shù)據(jù)同樣重要。研究人員強調(diào),他們希望該模型具有比知識更強的推理能力,從而從第二階段語料庫中選擇的數(shù)據(jù)比從第一階段語料庫中更多。
論文(https://arxiv.org/pdf/2404.14219)中的圖2強調(diào)了數(shù)據(jù)優(yōu)化的潛在關(guān)系
有趣的是,當(dāng)他們用與訓(xùn)練phi-3-small大致相同的數(shù)據(jù)混合物訓(xùn)練phi-3-medium時,他們注意到從7B參數(shù)到14B的改進遠比從3.8B到7B的改進有限。作者懷疑這不是塊結(jié)構(gòu)的限制,而是他們用來訓(xùn)練phi-3-medium的數(shù)據(jù)混合。
后期訓(xùn)練
該團隊使用監(jiān)督微調(diào)(Supervised Fine Tuning:SFT)和直接偏好優(yōu)化(DPO:Direct Preference Optimization)技術(shù)來改進訓(xùn)練后的模型。有興趣深入了解DPO的讀者可以從鏈接https://medium.com/towards-data-science/understanding-the-implications-of-direct-preference-optimization-a4bbd2d85841處查看我的博客文章。監(jiān)督微調(diào)是一種遷移學(xué)習(xí)方法,我們使用自定義數(shù)據(jù)集來提高LLM在該數(shù)據(jù)集上的能力。作者使用SFT來提高模型在數(shù)學(xué)、編碼、推理和安全等不同領(lǐng)域的能力。然后,他們使用DPO進行聊天優(yōu)化,引導(dǎo)其遠離他們想要避免的回應(yīng),轉(zhuǎn)向理想的回應(yīng)。
正是在這個階段,作者將phi-3-mini的上下文窗口從4k個符號大小擴展到128k個符號。他們把用來做這件事的方法命名為“長繩索(Long Rope)”。作者聲稱,這兩種上下文類型之間的性能是一致的,考慮到上下文長度的巨大增加,這是一件大事。如果有足夠的興趣,我將再單獨發(fā)表一篇關(guān)于該論文中相關(guān)研究成果的博客。
手機使用場景下的量化
盡管上述這些模型很小,但要讓這些模型在手機上跑起來,仍然需要進一步最小化。通常,LLM的權(quán)重被存儲為浮點形式;例如,Phi-3的原始權(quán)重是bfloat16,這意味著每個權(quán)重占用內(nèi)存中的16位。雖然16位可能看起來微不足道,但當(dāng)你考慮到10?數(shù)量級大小的模型中的參數(shù)時,您就會意識到每個額外的位加起來的速度是怎樣的。
為了解決這個問題,作者將權(quán)重從16位壓縮到4位。其基本思想是減少存儲每個數(shù)字所需的位數(shù)。作為一個概念性的例子,數(shù)字2.71828可以濃縮為2.72。雖然這是一種有損操作,但它仍然可以捕獲大部分信息,同時占用的存儲空間要少得多。
論文(https://arxiv.org/pdf/2404.14219)中的圖1內(nèi)容
作者在安裝A16芯片的iPhone上運行了上述量化內(nèi)容,發(fā)現(xiàn)它每秒可以產(chǎn)生多達12個符號。相比之下,運行LLaMa-2量化4位的M1 MacBook的運行速度約為每秒107個符號。我見過的最快的符號生成(Groq)以每秒853.35個符號的速度生成符號。鑒于這僅僅是一個開始,我們能夠以如此之快的速度看到這款模型在iPhone上生成的符號,這一點值得注意。另外,推斷速度方面似乎只會更快一些。
將Phi-3與搜索引擎配對
小型模型的一個局限性是它在網(wǎng)絡(luò)中存儲信息的位置較少。因此,我們發(fā)現(xiàn)Phi-3在需要廣泛知識的任務(wù)方面不如LLaMa-2等模型執(zhí)行得好。
論文作者建議,通過將Phi-3與搜索引擎配對,該模型的能力將顯著提高。如果是這樣的話,我認為檢索增強生成(RAG)很可能會繼續(xù)存在,成為幫助小型模型和大型模型一樣具有性能的關(guān)鍵部分。
論文(https://arxiv.org/pdf/2404.14219)中的圖4強調(diào)如何搜索能夠提高Phi-3性能
結(jié)論
如今,我們看到了機器學(xué)習(xí)領(lǐng)域已經(jīng)出現(xiàn)了高性能的小型模型。雖然訓(xùn)練這些模型在很大程度上仍然依賴于高性能硬件,但對它們的推理正日益普及開來。這將引發(fā)一些有趣現(xiàn)象的出現(xiàn)。
首先,可以在本地運行的模型幾乎是完全私有的,允許用戶提供這些LLM數(shù)據(jù);否則,他們可能會覺得在互聯(lián)網(wǎng)上發(fā)送不舒服。這為更多的應(yīng)用場景打開了大門。
其次,這些模型將推動移動硬件的性能提升。因此,我希望在高端智能手機上看到更多的片上系統(tǒng)(SoC),尤其是CPU和GPU之間具有共享內(nèi)存的SoC,以最大限度地提高推理速度。此外,與該硬件具有高質(zhì)量接口也是至關(guān)重要。在消費硬件領(lǐng)域,任何新的硬件上市都可能需要像Apple Silicon的MLX這樣的庫。
第三,正如論文所展示的,在LLM領(lǐng)域,高質(zhì)量數(shù)據(jù)在許多方面都可以勝過更多的網(wǎng)絡(luò)復(fù)雜性;因此,人們一方面要尋找高質(zhì)量數(shù)據(jù),同時生成高質(zhì)量數(shù)據(jù)的競爭也會不斷加劇。
總之,當(dāng)前我們正處于一個激動人心的發(fā)展時期。
參考文獻
【1】Abdin, M.,等人?!癙hi-3 Technical Report: A Highly Capable Language Model Locally on Your Phone” (2024)。arXiv。
【2】Ding,Y.等人。“LongRoPE: Extending LLM Context Window Beyond 2 Million Tokens” (2024),arXiv。
【3】Gerganov, G.,等人?!癙erformance of llama.cpp on Apple Silicon M-series” (2023),GitHub。
【4】Ainslie, J.,等人?!癎QA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints” (2023),arXiv。
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。
原文標題:Phi-3 and the Beginning of Highly Performant iPhone LLMs,作者:Matthew Gunton
鏈接:
https://towardsdatascience.com/phi-3-and-the-beginning-of-highly-performant-iphone-models-d413d8ea0714。