官方的Code Llama開源:免費商用,神秘版本接近GPT-4
今日,Meta 的開源 Llama 模型家族迎來了一位新成員 —— 專攻代碼生成的基礎(chǔ)模型 Code Llama。
作為 Llama 2 的代碼專用版本,Code Llama 基于特定的代碼數(shù)據(jù)集在其上進一步微調(diào)訓(xùn)練而成。
Meta 表示,Code Llama 的開源協(xié)議與 Llama 2 一樣,免費用于研究以及商用目的。
相關(guān)論文《Code Llama: Open Foundation Models for Code》已經(jīng)公布,足足有 47 頁,作者有 25 位。
論文地址:https://ai.meta.com/research/publications/code-llama-open-foundation-models-for-code/
GitHub 地址:https://github.com/facebookresearch/codellama
Code Llama 系列模型有三個版本,參數(shù)量分別為 7B、13B 和 34B。并且支持多種編程語言,包括 Python、C++、Java、PHP、Typescript (Javascript)、C# 和 Bash。
Code Llama 穩(wěn)定支持了最高 10 萬 token 的上下文生成。下圖 2 為 Code Llama 的微調(diào)流程。
就其效果來說,Code Llama 的不同版本在 HumanEval 和 MBPP 數(shù)據(jù)集上的一次生成通過率(pass@1)都可以超越 GPT-3.5。
另外,Code Llama 的「Unnatural」34B 版本在 HumanEval 數(shù)據(jù)集上的 pass@1 接近了 GPT-4(62.2% vs 67.0%)。Meta 沒有發(fā)布這個版本,但通過一小部分高質(zhì)量編碼數(shù)據(jù)的訓(xùn)練實現(xiàn)了明顯的效果改進。
這個特殊版本引起了很多人的注意,其中就有特斯拉前 AI 總監(jiān)、回歸 OpenAI 的 Andrej Karpathy。
文中雖然提到它是「在 15000 個 unnatural 指令上微調(diào)的 Code Llama-Python 34B 版本」,但 Karpathy 仍然對這個「神秘的名稱、模糊的描述、碾壓其他的保密模型」感到很好奇。
Code Llama 如何工作
Code Llama 編碼能力非常強,它可以根據(jù)代碼和自然語言提示生成代碼(例如用戶輸入提示「幫我寫一個輸出斐波那契序列的函數(shù)?!梗?它還可幫助用戶進行代碼補全和調(diào)試代碼。
三個參數(shù)版本的 Code Llama 模型都使用了 500B 的代碼 tokens 和代碼相關(guān)數(shù)據(jù)進行訓(xùn)練。7B 和 13B 基礎(chǔ)和指令模型也經(jīng)過了 FIM(fill-in-the-middle)訓(xùn)練,從而允許將代碼插入到現(xiàn)有代碼中,這意味著它們可以支持開箱即用的代碼補全等任務(wù)。
下表為 Code Llama 的訓(xùn)練數(shù)據(jù)集。
有了這三種模型,不同的服務(wù)和延遲要求都能得到滿足。例如,7B 模型可以在單個 GPU 上運行;34B 模型能夠返回最佳結(jié)果并提供更好的編碼輔助,但就速度而言,較小的 7B 和 13B 模型速度更快,更適合低延遲任務(wù),例如實時代碼補全。
Code Llama 不僅提供了多達 100000 個上下文 token 的穩(wěn)定生成,所有模型的訓(xùn)練 token 序列也高達 16000。
除了作為生成更長程序的先決條件外,擁有更長的輸入序列也為 Code Llama 帶來新的功能。例如,用戶可以為模型提供來自他們代碼庫的更多上下文,以使生成的代碼更相關(guān)。
值得一提的是,Meta 更進一步微調(diào)了 Code Llama 的兩個附加變體:Code Llama - Python 和 Code Llama - Instruct。
Code Llama-Python 是 Code Llama 的一種變體,其在 Python 代碼的 100B token 上進一步微調(diào)。下表為 Code Llama-Python 的訓(xùn)練數(shù)據(jù)集。
Code Llama - Instruct 是 Code Llama 的指令微調(diào)和對齊變體,能夠更好地理解輸入提示。Meta 建議在使用 Code Llama 進行代碼生成時使用 Code Llama - Instruct 變體,因為 Code Llama - Instruct 已經(jīng)過微調(diào),可以用自然語言生成有用且安全的答案。
Meta 表示,他們不建議使用 Code Llama 或 Code Llama - Python 執(zhí)行一般的自然語言任務(wù),因為這兩個模型都不是為遵循自然語言指令而設(shè)計的。Code Llama 專門用于特定于代碼的任務(wù),不適合作為其他任務(wù)的基礎(chǔ)模型。
使用 Code Llama 模型時,用戶必須遵守許可和使用政策。
Code Llama 性能如何
Meta 使用了 HumanEval 和 MBPP(Mostly Basic Python Programming)兩個編碼基準(zhǔn)進行測試。其中,HumanEval 測試模型基于文檔字符串(docstrings)完成代碼的能力,MBPP 測試模型基于描述編寫代碼的能力。
結(jié)果表明,Code Llama 的性能優(yōu)于開源、特定于代碼任務(wù)的 LLM,并且優(yōu)于自家 Llama 2。例如,Code Llama 34B 在 HumanEval 上得分為 53.7%,在 MBPP 上得分為 56.2%,與其他最先進的開源解決方案相比是最好的,與 ChatGPT 相當(dāng)。
不過,Code Llama 也存在風(fēng)險,Meta 表示構(gòu)建負責(zé)任地 AI 模型至關(guān)重要,他們在發(fā)布 Code Llama 之前采取了許多安全措施。作為紅隊測試工作的一部分,Meta 對 Code Llama 生成惡意代碼的風(fēng)險進行了定量評估。他們創(chuàng)建了一些提示,以試圖讓模型生成惡意代碼,并將 Code Llama 對這些提示的響應(yīng)與 ChatGPT (GPT3.5 Turbo) 進行比較。結(jié)果發(fā)現(xiàn),Code Llama 的回答更安全。
由此看來,編碼能力不是特別強的 Llama 2,這個坑已被 Code Llama 填上了。Meta 希望 Code Llama 的出現(xiàn)能夠激勵其他研究者基于 Llama 2 為研究和商業(yè)產(chǎn)品創(chuàng)建新的創(chuàng)新工具。