CodeLlama – 70B,基礎(chǔ)編碼模型;
CodeLlama – 70B – Python,專門用于 Python 編碼的 70B 模型;
Code Llama – 70B – Instruct 70B,針對(duì)自然語(yǔ)言指令理解進(jìn)行微調(diào)的版本。
為了對(duì)比現(xiàn)有解決方案測(cè)試 Code Llama 的性能表現(xiàn),Meta 選擇了兩項(xiàng)流行的編碼基準(zhǔn):HumanEval 與 Mostly Basic Ptyon Programming(MBPP)。其中 HumanEval 主要測(cè)試模型根據(jù)文檔字符串補(bǔ)全代碼的能力,而 MBPP 則測(cè)試模型根據(jù)描述編寫代碼的能力。
從基準(zhǔn)測(cè)試結(jié)果來(lái)看,Code Llama 的表現(xiàn)優(yōu)于編碼專用的開(kāi)源 Llama,甚至超越了 Llama 2。例如,Code Llama 34B 在 HumanEval 上的得分為 53.7%,優(yōu)于 GPT-3.5 的 48.1%,更接近 OpenAI 論文報(bào)告的 GPT-4 的 67%。在 MBPP 上,Code Llama 34B 得分為 56.2%,超越了其他最先進(jìn)的開(kāi)源解決方案,已經(jīng)與 ChatGPT 基本持平。
扎克伯格在 Facebook 上說(shuō)道,“編寫和編輯代碼已經(jīng)成為當(dāng)今人工智能模型最重要的用途之一。編碼能力也被證明對(duì)人工智能模型更嚴(yán)格、更符合邏輯地處理其他領(lǐng)域的信息非常重要。我對(duì)這個(gè)進(jìn)展感到自豪,并期待 Llama 3 和未來(lái)的模型中包括這些進(jìn)展。”
Code Llama 是 Llama 2 模型的編碼專用版本,是后者在編碼數(shù)據(jù)集之上接受進(jìn)一步訓(xùn)練的產(chǎn)物,且數(shù)據(jù)采集周期更長(zhǎng)。從本質(zhì)上講,Code Llama 擁有比 Llama 2 更強(qiáng)的編碼功能。它可以根據(jù)代碼和自然語(yǔ)言提示詞生成代碼及與代碼相關(guān)的自然語(yǔ)言(例如,“為我這一條輸出斐波那契序列的函數(shù)”),亦可用于代碼補(bǔ)全和調(diào)試。
Code Llama 支持當(dāng)今多種高人氣編程語(yǔ)言,包括 Python、C++、Java、PHP、Typescript (Javascript)、C# 和 Bash。
這次,Meta 將發(fā)布四種 Code Llama 模型版本,參數(shù)分別為 7B、13B、34B 和 70B。各模型版本使用 500B 代碼 token 與代碼相關(guān)數(shù)據(jù)進(jìn)行訓(xùn)練,且 70B 模型則采用 1TB token 進(jìn)行訓(xùn)練。7B 與 13B 基礎(chǔ)與指令模型還經(jīng)過(guò) fill-in-the-middle(FIM)訓(xùn)練,允許向現(xiàn)有代碼中插入新代碼,因此可以支持開(kāi)箱即用的代碼補(bǔ)全等任務(wù)。
三種模型分別能夠滿足不同的服務(wù)與延遲要求。例如,7B 模型可以在單一 GPU 上運(yùn)行。34B 和 70B 模型則可返回最佳結(jié)果并提供更好的編碼輔助功能。其中 7B 與 13B 模型運(yùn)行速度更快,適合實(shí)時(shí)代碼補(bǔ)全等強(qiáng)調(diào)低延遲的編碼任務(wù)。
Code Llama 模型可實(shí)現(xiàn)最多 10 萬(wàn)個(gè)上下文 token 的穩(wěn)定生成能力。所有模型均在 1.6 萬(wàn)個(gè) token 的序列上進(jìn)行訓(xùn)練,并在最多 10 萬(wàn)個(gè) token 的輸入場(chǎng)景下表現(xiàn)出性能提升。
除了能夠生成更長(zhǎng)的編碼程序之外,更長(zhǎng)的輸入序列窗口還能為編碼大模型解鎖其他令人興奮的新用例。例如,用戶可以向模型輸入來(lái)自代碼庫(kù)的更多上下文信息,確保生成結(jié)果的相關(guān)性更強(qiáng)。這還有助于在體量更大的代碼庫(kù)中進(jìn)行調(diào)試,幫助開(kāi)發(fā)人員快速找到與特定問(wèn)題相關(guān)的所有代碼?,F(xiàn)在,開(kāi)發(fā)人員可以將完整代碼直接提交至大模型,高效完成涉及大量代碼的調(diào)試任務(wù)。
此外,Meta 還進(jìn)一步微調(diào)了 Code Llama 的兩個(gè)附加變體:Code Llama – Python 與 Code Llama – Instruct。
Code Llama – Python 是 Code Llama 的特定語(yǔ)言專用變體,使用 100B 個(gè) Python 代碼 token 上接受了進(jìn)一步微調(diào)。由于 Python 是代碼生成領(lǐng)域的基準(zhǔn)測(cè)試語(yǔ)言,并且通過(guò) PyTorch 在 AI 社區(qū)中發(fā)揮著重要作用,所以 Meta 相信這套專用模型將提供更有針對(duì)性的實(shí)際功能。
Code Llama – Instruct 則是 Code Llama 的指令微調(diào)與對(duì)齊變體。指令微調(diào)同樣屬于繼續(xù)訓(xùn)練過(guò)程,能夠滿足其他特定目標(biāo)。該模型接受“自然語(yǔ)言指令”輸入與預(yù)期輸出組合的持續(xù)訓(xùn)練,因此能夠更好地理解人們對(duì)于提示詞的生成期望。由于 Code Llama – Instruct 專門就生成實(shí)用、安全的自然語(yǔ)言回答進(jìn)行了微調(diào),因此在使用 Code Llama 進(jìn)行代碼生成時(shí),Meta 建議開(kāi)發(fā)者優(yōu)先選擇 Code Llama – Instruct。
Meta 并不建議開(kāi)發(fā)者使用 Code Llama 或者 Code Llama – Python 執(zhí)行常規(guī)自然語(yǔ)言任務(wù),因?yàn)檫@兩套模型并不是為遵循自然語(yǔ)言指令所設(shè)計(jì)。Code Llama 專門用于特定編碼任務(wù),不適合作為其他通用任務(wù)的基礎(chǔ)模型。
另外,在使用 Code Llama 模型時(shí),用戶須遵守 Meta 指定的許可證與可接受使用政策。
沒(méi)有意外,Code Llama 70B 贏得了開(kāi)發(fā)者們的贊揚(yáng),甚至有人稱“Code Llama 70B 是代碼生成領(lǐng)域的游戲規(guī)則改變者?!?/p>
但有自稱使用過(guò)的開(kāi)發(fā)者表示,“我使用 Ollama 嘗試了 70B 模型,即使經(jīng)過(guò)多次嘗試,它也無(wú)法編寫貪吃蛇游戲。而 ChatGPT 一次嘗試就給出了一款可以運(yùn)行的游戲。”
另一方面,隨著模型參數(shù)的增加,開(kāi)發(fā)者們也擔(dān)心自己手頭沒(méi)有足夠裝備來(lái)滿足運(yùn)行 Code Llama 70B。有人指出,在 A100-80GB 上訓(xùn)練所有 12 個(gè) Code Llama 模型需要 1400K GPU 小時(shí)。
運(yùn)行大模型幾乎可以歸結(jié)為兩個(gè)因素:內(nèi)存帶寬和計(jì)算能力,足夠高的內(nèi)存帶寬才能“提供”計(jì)算,足夠強(qiáng)大的計(jì)算才能跟上內(nèi)存提供的數(shù)據(jù)。對(duì)于個(gè)人開(kāi)發(fā)者來(lái)說(shuō),可能并沒(méi)有完美設(shè)備,因此很開(kāi)發(fā)者也在尋求更容易配置的量化模型版本。
也有開(kāi)發(fā)者支招:可以在 64GB RAM 的 Macbook M1/M2 上運(yùn)行 70B 模型。
開(kāi)發(fā)者“tinco”表示,“據(jù)我所知,市場(chǎng)上沒(méi)有其他筆記本電腦具有與 64GB MBP 一樣多的 VRAM。您可以使用兩個(gè) 3090 制成一臺(tái) Linux 臺(tái)式計(jì)算機(jī),將它們連接在一起提供 48GB 的 VRAM。這樣顯然可以運(yùn)行 4 位量化的 6k 上下文 70B Llama 模型?!盩inco 進(jìn)一步表示,人們推薦 Macbook 是因?yàn)樗鼈兪且环N相對(duì)便宜且簡(jiǎn)單的方法,可以將大量 RAM 連接到加速器上。
Tinco 提醒道,這些是模型的量化版本,因此它們不如原始 70B 模型好,盡管人們聲稱它們的性能非常接近原始性能。要在不進(jìn)行量化的情況下運(yùn)行,則需要大約 140GB 的 VRAM。這只有一臺(tái) NVidia H100(不知道價(jià)格)或兩臺(tái) A100(每臺(tái) 18,000 美元)才能實(shí)現(xiàn)。
也有開(kāi)發(fā)者分析稱,理論上,單個(gè) Nvidia 4090 能夠以“可用”速度運(yùn)行量化的 70B 模型。Mac 硬件在人工智能方面如此強(qiáng)大的原因是因?yàn)榻y(tǒng)一的架構(gòu),這意味著內(nèi)存在 GPU 和 CPU 之間共享。還有其他因素,但本質(zhì)上歸結(jié)為每秒代幣的優(yōu)勢(shì)。用戶可以在內(nèi)存帶寬較低的舊 GPU 上運(yùn)行這些模型中的任何一個(gè),但每秒的令牌速度對(duì)于大多數(shù)人認(rèn)為“可用”的速度來(lái)說(shuō)太慢了,而且必要的量化可能會(huì)明顯影響質(zhì)量。
代碼生成一直既被開(kāi)發(fā)者叫好又被吐槽,即使是 ChatGPT 和 Copilot,因?yàn)殡m然可以提效,但是質(zhì)量問(wèn)題一言難盡。
有開(kāi)發(fā)者在 Hacker News 上表示,“兩個(gè)月后我取消了訂閱(Copilot),因?yàn)槲一颂嗟木θz查所有代碼并修復(fù)所有錯(cuò)誤。當(dāng)嘗試處理任何不瑣碎的或與 SQL 有關(guān)的事情時(shí)(即使我用整個(gè)模式預(yù)先加載它),它基本上是無(wú)用的。自己編寫所有內(nèi)容要省力得多,因?yàn)槲覍?shí)際上知道自己想寫什么,并且修復(fù)自己的錯(cuò)誤比修復(fù)機(jī)器人的錯(cuò)誤更容易?!?/p>
使用 ChatGPT 的“ben_w”表示,“我對(duì)它( ChatGPT)的功能感到驚訝,但即便如此,我也不會(huì)稱其為'好代碼’。我將它用于 JavaScript 編程,因?yàn)殡m然我可以閱讀(大部分) JS 代碼,但過(guò)去 14 年我一直專業(yè)從事 iOS 工作,因此不知道什么是瀏覽器領(lǐng)域的最佳實(shí)踐。盡管如此,我得到工作代碼后,我也可以發(fā)現(xiàn)它產(chǎn)生了錯(cuò)誤的選擇和(看起來(lái))奇怪的東西?!?/p>
類似的問(wèn)題我們也在之前的文章《代碼屎山噩夢(mèng)加速來(lái)襲,都是 AI 生成代碼的鍋?》中討論過(guò)。最新研究也表示,GitHub Copilot “代碼質(zhì)量面臨下行壓力”,代碼可維護(hù)性的趨勢(shì)令人不安。
開(kāi)源領(lǐng)域一直在進(jìn)行生成更好代碼的研究。在 Hugging Face 的“Big Code Models Leaderboard”上,也有很多被開(kāi)發(fā)者認(rèn)可的模型。
比如北京大學(xué)推出了?系列從 1.3B 到 33B 的 DeepSeek-Coder 開(kāi)源代碼模型。DeepSeek-Coder 基于 2 萬(wàn)億個(gè)代幣上從頭訓(xùn)練,都使用 16K 的窗口大小和額外的填空任務(wù)在項(xiàng)目級(jí)代碼語(yǔ)料庫(kù)上進(jìn)行預(yù)訓(xùn)練,以支持項(xiàng)目級(jí)代碼補(bǔ)全和填充。測(cè)評(píng)結(jié)果表明,DeepSeek-Coder 不僅在多個(gè)基準(zhǔn)測(cè)試中實(shí)現(xiàn)了開(kāi)源代碼模型中最先進(jìn)的性能,?且還超越了 Codex 和 GPT-3.5 等現(xiàn)有的閉源模型。
對(duì)于有開(kāi)發(fā)者提出“當(dāng)前 SOTA 本地代碼生成模型是什么”的問(wèn)題,可能現(xiàn)在還沒(méi)有標(biāo)準(zhǔn)答案,大家還在努力想辦法優(yōu)化現(xiàn)在模型,現(xiàn)在遠(yuǎn)不是終點(diǎn)。
聯(lián)系客服