大佬出走后首個發(fā)布!Stability官宣代碼模型Stable Code Instruct 3B
大佬出走后,第一個模型來了!
就在今天,Stability AI官宣了新的代碼模型Stable Code Instruct 3B。
圖片
要說Stability也是真的很神奇,首席執(zhí)行官辭職了,Stable Diffusion其中幾位作者也離開了,投資公司出了點故障,自己的工資也可能要發(fā)不起了,
——但是,樓外風(fēng)雨飄搖,實驗室里巋然不動,研究該做做,論文該發(fā)發(fā),模型該調(diào)調(diào),大模型各領(lǐng)域的戰(zhàn)爭是一個沒落下。
而且不僅僅是鋪開攤子搞全面戰(zhàn)爭,每項研究也都在不斷前進,比如今天的Stable Code Instruct 3B就是在之前的Stable Code 3B的基礎(chǔ)上做了指令調(diào)優(yōu):
圖片
論文地址:https://static1.squarespace.com/static/6213c340453c3f502425776e/t/6601c5713150412edcd56f8e/1711392114564/Stable_Code_TechReport_release.pdf
通過自然語言提示,Stable Code Instruct 3B可以處理各種任務(wù),例如代碼生成、數(shù)學(xué)和其他與軟件開發(fā)相關(guān)的查詢。
圖片
同階無敵,越級強殺
Stable Code Instruct 3B在同等參數(shù)量的模型中,做到了當前的SOTA,甚至優(yōu)于比自己大兩倍多的CodeLlama 7B Instruct等模型,并且在軟件工程相關(guān)任務(wù)中的表現(xiàn)與StarChat 15B相當。
圖片
從上圖可以看出,與Codellama 7B Instruct和DeepSeek-Coder Instruct 1.3B等領(lǐng)先模型相比,Stable Code Instruct 3B在一系列編碼任務(wù)中性能優(yōu)異。
測試表明,Stable Code Instruct 3B在代碼完成準確性、對自然語言指令的理解、以及跨不同編程語言的多功能性方面,都能夠打平甚至超越競爭對手。
圖片
Stable Code Instruct 3B根據(jù)Stack Overflow 2023開發(fā)者調(diào)查的結(jié)果,將訓(xùn)練專注于 Python、Javascript、Java、C、C++和Go等編程語言。
上圖使用Multi-PL基準測試,比較了三個模型以各種編程語言生成輸出的強度。可以發(fā)現(xiàn)Stable Code Instruct 3B在所有語言中都明顯優(yōu)于CodeLlama,并且參數(shù)量還少了一半多。
除了上述的熱門編程語言,Stable Code Instruct 3B還包括對其他語言(如SQL、PHP和Rust)的訓(xùn)練,并且即使在沒有經(jīng)過訓(xùn)練的的語言(如Lua)中,也能提供強大的測試性能。
Stable Code Instruct 3B不僅精通代碼生成,還精通FIM(代碼中間填充)任務(wù)、數(shù)據(jù)庫查詢、代碼翻譯、解釋和創(chuàng)建。
通過指令調(diào)優(yōu),模型能夠理解細微的指令并采取行動,促進了除了簡單代碼完成之外的廣泛編碼任務(wù),比如數(shù)學(xué)理解、邏輯推理和處理軟件開發(fā)的復(fù)雜技術(shù)。
圖片
模型下載:https://huggingface.co/stabilityai/stable-code-instruct-3b
Stable Code Instruct 3B現(xiàn)在可以通過Stability AI會員資格,用于商業(yè)目的。對于非商業(yè)用途,可以在Hugging Face上下載模型重量和代碼。
技術(shù)細節(jié)
圖片
模型架構(gòu)
Stable Code建立在Stable LM 3B之上,是一個decoder-only Transformer結(jié)構(gòu),設(shè)計類似于LLaMA。下表是一些關(guān)鍵的結(jié)構(gòu)信息:
圖片
與LLaMA的主要區(qū)別包括:
位置嵌入:在頭部嵌入的前25%使用旋轉(zhuǎn)位置嵌入,以提高后續(xù)的吞吐量。
正則化:使用帶學(xué)習(xí)偏差項的LayerNorm,而非RMSNorm。
偏置項:刪除了前饋網(wǎng)絡(luò)和多頭自注意力層中所有的偏置項,除了KQV的。
使用與Stable LM 3B模型相同的分詞器(BPE),大小為50,257;另外還參照了StarCoder的特殊標記,包括用于指示文件名稱、存儲庫的星數(shù)、中間填充(FIM)等。
對于長上下文訓(xùn)練,使用特殊標記來指示兩個串聯(lián)文件何時屬于同一存儲庫。
訓(xùn)練過程
訓(xùn)練數(shù)據(jù)
預(yù)訓(xùn)練數(shù)據(jù)集收集了各種可公開訪問的大規(guī)模數(shù)據(jù)源,包括代碼存儲庫、技術(shù)文檔(如readthedocs)、以數(shù)學(xué)為重點的文本,和大量Web數(shù)據(jù)集。
初始預(yù)訓(xùn)練階段的主要目標是學(xué)習(xí)豐富的內(nèi)部表示,以顯著提高模型在數(shù)學(xué)理解、邏輯推理、和處理軟件開發(fā)相關(guān)復(fù)雜技術(shù)文本方面的能力。
此外,訓(xùn)練數(shù)據(jù)還包含通用文本數(shù)據(jù)集,以便為模型提供更廣泛的語言知識和上下文,最終使模型能夠以對話方式處理更廣泛的查詢和任務(wù)。
下表展示了預(yù)訓(xùn)練語料庫的數(shù)據(jù)源、類別和采樣權(quán)重等,其中代碼和自然語言數(shù)據(jù)的比例為80:20。
圖片
另外,研究人員還引入了一個小型合成數(shù)據(jù)集,數(shù)據(jù)由CodeAlpacadataset的種子提示合成生成,包含174,000個提示。
并且參照WizardLM的方式,逐步增加給定種子提示的復(fù)雜性,又額外獲得了100,000個提示。
作者認為,在預(yù)訓(xùn)練階段早期引入這些合成數(shù)據(jù)有助于模型更好地響應(yīng)自然語言文本。
長上下文數(shù)據(jù)集
由于存儲庫中多個文件通常相互依賴,因此上下文長度對于編碼模型很重要。
研究人員估計了軟件存儲庫中token的中位數(shù)和平均數(shù)分別為12k和18k,因此選擇16,384作為上下文長度。
接下來就是創(chuàng)建一個長上下文數(shù)據(jù)集,研究人員在存儲庫中獲取了一些熱門語言編寫的文件并將它們組合在一起,在每個文件之間插入一個特殊的標記,以保持分離,同時保留內(nèi)容流。
為了規(guī)避因文件的固定順序而可能產(chǎn)生的任何潛在偏差,作者采用了一種隨機策略。對于每個存儲庫,生成兩個不同的連接文件順序。
圖片
分階段訓(xùn)練
Stable Code使用32個Amazon P4d實例進行訓(xùn)練,包含256個NVIDIA A100(40GB HBM2)GPU,并使用ZeRO進行分布式優(yōu)化。
圖片
這里采用了一種分階段的訓(xùn)練方法,如上圖所示。
訓(xùn)練按照標準的自回歸序列建模預(yù)測下一個標記。使用Stable LM 3B的checkpoint初始化模型,第一階段訓(xùn)練的上下文長度為4096,然后進行持續(xù)的預(yù)訓(xùn)練。
訓(xùn)練以BFloat16混合精度執(zhí)行,all-reduce時采用FP32。AdamW 優(yōu)化器設(shè)置為:β1=0.9,β2=0.95,ε=1e?6,λ(權(quán)重衰減)=0.1。從學(xué)習(xí)率=3.2e-4開始,設(shè)置最小學(xué)習(xí)率為3.2e-5,使用余弦衰減。
圖片
自然語言模型訓(xùn)練的核心假設(shè)之一是從左到右的因果順序,不過對于代碼來說,這種假設(shè)并不總是成立(例如,函數(shù)調(diào)用和函數(shù)聲明對于許多函數(shù)來說可以是任意順序的)。
為了解決這個問題,研究人員使用了FIM(中間填充)。將文檔隨機拆分為三個段:前綴、中間段和后綴,然后將中間段移動到文檔的末尾。重新排列后,遵循相同的自回歸訓(xùn)練過程。
指令微調(diào)
在預(yù)訓(xùn)練之后,作者通過微調(diào)階段進一步提高模型的對話技能,該階段包括監(jiān)督微調(diào)(SFT)和直接偏好優(yōu)化(DPO)。
首先使用在Hugging Face上公開可用的數(shù)據(jù)集進行SFT微調(diào):包括OpenHermes,Code Feedback,CodeAlpaca。
在執(zhí)行精確匹配重復(fù)數(shù)據(jù)刪除后,三個數(shù)據(jù)集總共提供了大約500000個訓(xùn)練樣本。
使用余弦學(xué)習(xí)速率調(diào)度器控制訓(xùn)練過程,并將全局批處理大小設(shè)置為512,將輸入打包到長度不超過4096的序列中。
在SFT之后,開始DPO階段,利用來自UltraFeedback的數(shù)據(jù),策劃了一個包含大約7,000個樣本的數(shù)據(jù)集。此外,為了提高模型的安全性,作者還納入了Helpful and Harmless RLFH數(shù)據(jù)集。
研究人員采用RMSProp作為優(yōu)化算法,DPO訓(xùn)練的初始階段將學(xué)習(xí)率提高到5e-7的峰值。
性能測試
下面比較模型在代碼完成任務(wù)上的性能,使用Multi-PL基準來評估模型。
Stable Code Base
下表顯示了在Multi-PL上,大小為3B參數(shù)及以下的不同代碼模型的性能。
圖片
盡管Stable Code的參數(shù)量分別不到Code Llama和StarCoder 15B的40%和20%,但模型在各種編程語言中的平均性能與它們持平。
Stable Code Instruct
下表在Multi-PL基準測試中,評估了幾個模型的instruct微調(diào)版本。
圖片
SQL Performance
代碼語言模型的一個重要應(yīng)用是數(shù)據(jù)庫查詢?nèi)蝿?wù)。在這個領(lǐng)域,將Stable Code Instruct的性能與其他流行的指令調(diào)優(yōu)模型,和專門為SQL訓(xùn)練的模型進行比較。這里使用Defog AI創(chuàng)建的基準。
圖片
推理性能
下表給出了在消費級設(shè)備和相應(yīng)的系統(tǒng)環(huán)境中運行Stable Code時的吞吐量和功耗。
圖片
結(jié)果表明,當采用較低的精度時,吞吐量增加了近兩倍。但需要注意的是,實施較低精度的量化可能會導(dǎo)致模型性能有所下降(可能很大)。
參考資料:https://stability.ai/news/introducing-stable-code-instruct-3b