設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

大佬出走后首個發(fā)布,Stability 官宣代碼模型 Stable Code Instruct 3B

新智元 2024/3/29 23:22:55 責(zé)編:清源

【新智元導(dǎo)讀】Stability AI 在大佬出走后似乎并未受到影響,最近又官宣了新的代碼模型 Stable Code Instruct 3B,在之前的基礎(chǔ)上更進(jìn)一步,干掉了所有同級競品,甚至能和 7B、15B 的模型掰手腕。

大佬出走后,第一個模型來了!

就在今天,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)爭,每項研究也都在不斷前進(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

通過自然語言提示,Stable Code Instruct 3B 可以處理各種任務(wù),例如代碼生成、數(shù)學(xué)和其他與軟件開發(fā)相關(guān)的查詢。

同階無敵,越級強(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)異。

測試表明,Stable Code Instruct 3B 在代碼完成準(zhǔn)確性、對自然語言指令的理解、以及跨不同編程語言的多功能性方面,都能夠打平甚至超越競爭對手。

Stable Code Instruct 3B 根據(jù) Stack Overflow 2023 開發(fā)者調(diào)查的結(jié)果,將訓(xùn)練專注于 Python、Javascript、Java、C、C++ 和 Go 等編程語言。

上圖使用 Multi-PL 基準(zhǔn)測試,比較了三個模型以各種編程語言生成輸出的強(qiáng)度??梢园l(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)中,也能提供強(qiáng)大的測試性能。

Stable Code Instruct 3B 不僅精通代碼生成,還精通 FIM(代碼中間填充)任務(wù)、數(shù)據(jù)庫查詢、代碼翻譯、解釋和創(chuàng)建。

通過指令調(diào)優(yōu),模型能夠理解細(xì)微的指令并采取行動,促進(jìn)了除了簡單代碼完成之外的廣泛編碼任務(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 上下載模型權(quán)重和代碼。

技術(shù)細(xì)節(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 的特殊標(biāo)記,包括用于指示文件名稱、存儲庫的星數(shù)、中間填充(FIM)等。

對于長上下文訓(xùn)練,使用特殊標(biāo)記來指示兩個串聯(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)練階段的主要目標(biāo)是學(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 個提示。

作者認(rèn)為,在預(yù)訓(xùn)練階段早期引入這些合成數(shù)據(jù)有助于模型更好地響應(yīng)自然語言文本。

長上下文數(shù)據(jù)集

由于存儲庫中多個文件通常相互依賴,因此上下文長度對于編碼模型很重要。

研究人員估計了軟件存儲庫中 token 的中位數(shù)和平均數(shù)分別為 12k 和 18k,因此選擇 16,384 作為上下文長度。

接下來就是創(chuàng)建一個長上下文數(shù)據(jù)集,研究人員在存儲庫中獲取了一些熱門語言編寫的文件并將它們組合在一起,在每個文件之間插入一個特殊的標(biāo)記,以保持分離,同時保留內(nèi)容流。

為了規(guī)避因文件的固定順序而可能產(chǎn)生的任何潛在偏差,作者采用了一種隨機(jī)策略。對于每個存儲庫,生成兩個不同的連接文件順序。

分階段訓(xùn)練

Stable Code 使用 32 個 Amazon P4d 實例進(jìn)行訓(xùn)練,包含 256 個 NVIDIA A100(40GB HBM2)GPU,并使用 ZeRO 進(jìn)行分布式優(yōu)化。

這里采用了一種分階段的訓(xùn)練方法,如上圖所示。

訓(xùn)練按照標(biāo)準(zhǔn)的自回歸序列建模預(yù)測下一個標(biāo)記。使用 Stable LM 3B 的 checkpoint 初始化模型,第一階段訓(xùn)練的上下文長度為 4096,然后進(jìn)行持續(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(中間填充)。將文檔隨機(jī)拆分為三個段:前綴、中間段和后綴,然后將中間段移動到文檔的末尾。重新排列后,遵循相同的自回歸訓(xùn)練過程。

指令微調(diào)

在預(yù)訓(xùn)練之后,作者通過微調(diào)階段進(jìn)一步提高模型的對話技能,該階段包括監(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ù)刪除后,三個數(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 基準(zhǔn)來評估模型。

Stable Code Base

下表顯示了在 Multi-PL 上,大小為 3B 參數(shù)及以下的不同代碼模型的性能。

盡管 Stable Code 的參數(shù)量分別不到 Code Llama 和 StarCoder 15B 的 40% 和 20%,但模型在各種編程語言中的平均性能與它們持平。

Stable Code Instruct

下表在 Multi-PL 基準(zhǔn)測試中,評估了幾個模型的 instruct 微調(diào)版本。

SQL Performance

代碼語言模型的一個重要應(yīng)用是數(shù)據(jù)庫查詢?nèi)蝿?wù)。在這個領(lǐng)域,將 Stable Code Instruct 的性能與其他流行的指令調(diào)優(yōu)模型,和專門為 SQL 訓(xùn)練的模型進(jìn)行比較。這里使用 Defog AI 創(chuàng)建的基準(zhǔn)。

推理性能

下表給出了在消費級設(shè)備和相應(yīng)的系統(tǒng)環(huán)境中運行 Stable Code 時的吞吐量和功耗。

結(jié)果表明,當(dāng)采用較低的精度時,吞吐量增加了近兩倍。但需要注意的是,實施較低精度的量化可能會導(dǎo)致模型性能有所下降(可能很大)。

參考資料:

  • https://stability.ai/news/introducing-stable-code-instruct-3b

本文來自微信公眾號:新智元 (ID:AI_era)

廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:Stability

軟媒旗下網(wǎng)站: IT之家 最會買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機(jī)APP應(yīng)用 魔方 最會買 要知