集體出走的Stability AI 發布全新代碼大模型,3B以下性能最優,超越Code Llama和DeepSeek-Coder
Stability AI又有新動作!程序員又有危機了?3月26日,Stability AI推出了先進的代碼語言模型Stable Code Instruct 3B,該模型是在Stable Code 3B的基礎上進行指令調優的Code LM。
Stability AI 表示,Stable Code Instruct 3B 在代碼完成準確性、對自然語言指令的理解以及處理多種編程語言方面都優于同類模型,在 3B 規模下提供最先進的性能,并且性能媲美Codellama 7B Instruct以及DeepSeek-Coder Instruct 1.3B
先讓我們來感受一下Stable Code Instruct 3B的效果吧~
在線試用:
???https://huggingface.co/spaces/stabilityai/stable-code-instruct-3b??Hugging Face地址:
??https://huggingface.co/stabilityai/stable-code-instruct-3b??技術報告:
https://static1.squarespace.com/static/6213c340453c3f502425776e/t/6601c5713150412edcd56f8e/1711392114564/Stable_Code_TechReport_release.pdf
從效果圖以及Stability AI的介紹可以看出Stable Code Instruct 3B有以下幾個功能特點:
- 自然語言理解:Stable Code Instruct 3B可以理解以自然語言為主的編程指令,并有效執行生成高質量代碼。
- 支持多種編程語言:Stable Code Instruct 3B不僅支持Python、Javascript、Java、C、C++和Go等語言,還支持其他廣泛采用的語言如SQL、PHP和Rust
- 多樣化編程任務:Stable Code Instruct 3B不僅精通代碼生成,還擅長FIM(填充中間)任務、數據庫查詢、代碼翻譯、解釋和創作。
- 更強的代碼理解能力:Stable Code Instruct 3B在訓練集最初未包括的語言(如Lua)中也能夠表現出較強的測試性能。這種熟練程度可能源于其對底層編碼原理的理解。
讓我們再來看看Stable Code Instruct 3B的實現方法吧~
方法
訓練數據
Stable Code Instruct收集了一系列公開訪問的大規模數據源。這些來源包括廣泛的代碼庫、廣泛的技術文檔集合(例如:readthedocs)、以數學為重點的文本和全面的網絡數據集,以在預訓練階段學習豐富的內部表達,超越單純的代碼理解。模型旨在顯著提升在數學理解、邏輯推理和處理軟件開發相關的復雜技術文本方面的能力。
模型架構
Stable Code是建立在Stable LM 3B基礎上構建的,并且該模型是一個causal decoder-only transformer,架構上與Llama類似,但和Llama有以下幾點區別:
- 位置嵌入:采用了旋轉位置嵌入(Rotary Position Embeddings),應用于頭嵌入維度的前25%,以提高吞吐量
- 歸一化方法:使用了具有學習偏置項的LayerNorm進行歸一化處理,而不是采用RMSNorm
- 偏置調整:除了鍵、查詢和值投影的偏差,Stable Code 從前饋網絡和多頭自注意力層中刪除了所有偏差項
模型訓練
- 計算基礎設施和設置
- Stable Code在32個Amazon P4d實例上進行訓練,包含256個NVIDIA A100 (40GB HBM2) GPUs。采用ZeRO階段1的分布式優化方法,消除了對模型分片的需求。
- 采用的全局批量大小為4,194,304個令牌。在表中的設置下,設備的性能達到大約222 TFLOPs/s,或71.15%的模型浮點操作利用率(MFU)。
- 多階段訓練
- 采用了在其他強大的代碼語言模型(如CodeGen、Stable Code Alpha、CodeLLaMA和DeepSeekCoder)中流行的分階段訓練方法。
訓練分為幾個階段,包括代碼數據預訓練、中間填充(FIM)訓練、長上下文持續訓練和指令微調。
- 模型初始化
- 代碼模型大多遵循兩種主要訓練方法之一:使用代碼和相關文本從頭開始訓練的模型(例如,CodeGen、Stable code Alpha、Deepsseek Coder),以及利用基礎語言模型的持續預訓練的模型。
- 預訓練的語言模型(如Stable LM 3B)初始化的模型往往表現優于從頭開始訓練的模型。這證實了自然語言與代碼之間的正面交叉轉移可以增強模型的能力。
- 中間填充(FIM)訓練
- 為了解決代碼中的左到右因果順序不總是成立的問題(例如,函數調用和聲明的順序可以是任意的)
- 將文檔隨機分為三個部分:前綴、中間部分和后綴,然后將中間部分移動到文檔的末尾。在重新排列之后,遵循相同的自回歸訓練過程。
- 在預訓練的兩個階段中都應用了FIM。為了在長上下文訓練階段考慮FIM,我們確保只允許在單個文件的范圍內應用FIM,以避免引入不現實的情景到訓練目標中。
微調和對齊
在預訓練之后,Stable Code Instruct通過由監督微調(SFT)和直接偏好優化(DPO)組成的微調階段進一步提高了模型的對話能力
- 監督微調
- 使用了Hugging Face上公開可用的幾個數據集進行SFT微調:OpenHermes、Code Feedback和CodeAlpaca。這些數據集合計提供了大約500,000個訓練樣本。
- SFT模型訓練了三個周期,使用余弦學習率調度器。在達到5e-5峰值學習率之前,實施了占訓練持續時間10%的熱身階段。
- 設置全局批量大小為512個序列,并將輸入打包成最多4096個令牌的序列。
- 直接偏好優化
- 繼SFT之后,我們應用了DPO,這是一種關鍵技術,對近期高性能模型(如Zephyr-7B、Neural-Chat-7B和Tulu-2-DPO-70B)的成功起到了關鍵作用。
- 我們整理了大約7,000個樣本的數據集,使用了來自UltraFeedback和Distilabel Capybara DPO-7k Binarized的數據,并僅保留了與代碼相關的樣本。
- 為提高模型安全性,我們添加了來自Bai等人的Helpful and Harmless RLFH數據集,以及HH-Anthropic數據集的無害子集。編譯了大約15,000個高關聯性的安全相關數據點。
結論
本文介紹了Stable Code Instruct,一種新的代碼語言模型,該模型不僅支持多樣的編程語言,更在3B規模的模型上提供最先進的性能。隨著技術的進步,將會有更多高性能的代碼模型被推出,未來寫代碼的工作是否會變得更加輕松呢?是否程序員就業會面臨危機呢?Stable Code Instruct的出現為我們勾勒了一個充滿無限可能的未來。
本文轉載自夕小瑤科技說,作者:蛋糕
原文鏈接:??https://mp.weixin.qq.com/s/BN6MsuOmKWc-HLQhigfkQg??
