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