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