英文名稱: Code Llama: Open Foundation Models for Code
中文名稱: Code Llama:開(kāi)放基礎(chǔ)代碼模型
鏈接: https://arxiv.org/abs/2308.12950
代碼: https://github.com/facebookresearch/codellama
作者: Baptiste Rozière, Jonas Gehring, Fabian Gloeckle, Sten Sootla, Itai Gat, Xiaoqing Ellen Tan, Yossi Adi, Jingyu Liu, Romain Sauvestre, Tal Remez, Jérémy Rapin, Artyom Kozhevnikov, Ivan Evtimov, Joanna Bitton, Manish Bhatt, Cristian Canton Ferrer, Aaron Grattafiori, Wenhan Xiong, Alexandre Défossez, Jade Copet, Faisal Azhar, Hugo Touvron, Louis Martin, Nicolas Usunier, Thomas Scialom, Gabriel Synnaeve
機(jī)構(gòu): Meta AI
日期: 2023-08-24
引用次數(shù): 319
1 讀后感
Code Llama 是一個(gè)基于 llama2 模型進(jìn)行訓(xùn)練得到的代碼生成大模型。又針對(duì)代碼填充、長(zhǎng)上下文等特殊條件以及人類通常用法進(jìn)行了優(yōu)化,因此它集成了 llama2 對(duì)自然語(yǔ)言的理解,并針對(duì)代碼生成場(chǎng)景進(jìn)行了優(yōu)化汰蓉。
除了調(diào)用推理,我們一般主要利用微調(diào)模型來(lái)進(jìn)行改進(jìn)模型效果逸尖,因此選擇一個(gè)好的基礎(chǔ)模型作為工作基礎(chǔ)非常重要古沥,Code Llama 是當(dāng)前代碼生成模型中比較推薦的基礎(chǔ)模型。
論文結(jié)構(gòu)針對(duì)幾項(xiàng)主要貢獻(xiàn)進(jìn)行了層層深入的討論娇跟。在整理時(shí)岩齿,我把實(shí)現(xiàn)部分歸納了一下,把同一主題的內(nèi)容放在一起了苞俘。
2 摘要
目標(biāo):發(fā)布 Code Llama 代碼模型系列盹沈,基于 Llama 2 開(kāi)發(fā),提供了在開(kāi)放模型中最先進(jìn)的性能吃谣、填充能力乞封、支持大型輸入上下文,并具有 zero-shot 指令跟隨能力岗憋,用于編程任務(wù)肃晚。
方法:提供多個(gè)版本以覆蓋各種應(yīng)用場(chǎng)景:基礎(chǔ)模型(Code Llama)、Python 專業(yè)化模型(Code Llama-Python)和指令引導(dǎo)模型(Code Llama-Instruct)仔戈,分別具有 7B关串、13B 和 34B 參數(shù)。
結(jié)論:這些模型在性能监徘、填充能力晋修、支持大型輸入上下文以及 zero-shot 指令跟隨能力方面表現(xiàn)出色。
3 引言
主要貢獻(xiàn)
- 基于 llama2 訓(xùn)練:所有 Code Llama 模型都使用 Llama2 模型權(quán)重進(jìn)行初始化凰盔,實(shí)驗(yàn)證明它優(yōu)于僅在代碼上訓(xùn)練的相同架構(gòu)墓卦。
- 代碼填充:生成代碼時(shí),需要考慮整個(gè)周圍上下文的同時(shí)填充代碼的缺失部分户敬,因此通過(guò)多任務(wù)目標(biāo)訓(xùn)練模型落剪,包括自回歸和因果填充預(yù)測(cè)。
- 長(zhǎng)上下文:將最大上下文長(zhǎng)度從 4,096 token 擴(kuò)展到 100,000 個(gè) token尿庐。
- 指令微調(diào):在專有 Instruct 數(shù)據(jù)的混合上進(jìn)行了進(jìn)一步微調(diào)著榴,以提高安全性和實(shí)用性。
4 Code Llama 實(shí)現(xiàn)
4.1 發(fā)布了三個(gè)版本
- Code Llama:基礎(chǔ)模型屁倔。
- Code Llama - Python:用于 Python 版本。
- Code Llama - Instruct:引導(dǎo)微調(diào)版本暮胧。
4.2 訓(xùn)練數(shù)據(jù)
從 Llama 2 的 7B锐借、13B 和 34B 版本開(kāi)始问麸,在初始階段使用 500B token 訓(xùn)練 Code Llama。
4.3 代碼填充
代碼填充的目標(biāo)是在給定周圍上下文情況下預(yù)測(cè)程序缺失部分钞翔。
使用因果掩蔽的概念來(lái)訓(xùn)練填充模型严卖。將字符級(jí)別的訓(xùn)練文檔拆分為前綴、中間部分和后綴布轿,拆分位置獨(dú)立于文檔長(zhǎng)度上的均勻分布進(jìn)行采樣哮笆。
4.4 長(zhǎng)上下文微調(diào)
提出了一個(gè)專用的長(zhǎng)上下文微調(diào)(LCFT)階段,模型支持 16,384 個(gè) token 的序列汰扭,高于 Llama 2 和初始代碼訓(xùn)練階段使用的 4,096 個(gè) token稠肘。對(duì)旋轉(zhuǎn)位置嵌入進(jìn)行優(yōu)化,將基周期從 10,000 增加到 1,000,000 以進(jìn)行微調(diào)萝毛。使模型支持處理更大的序列项阴,并減少短距離注意力的傾向。
4.5 指令微調(diào)
使用三種不同類型的數(shù)據(jù)訓(xùn)練:
4.5.1 專有數(shù)據(jù)集
使用 Llama 2 論文中的指令調(diào)整數(shù)據(jù)集 “RLHF V5” 微調(diào)模型笆包,通過(guò)人類反饋和人類反饋?zhàn)⑨尩膹?qiáng)化學(xué)習(xí)的幾個(gè)階段收集环揽,它結(jié)合了數(shù)以千計(jì)的監(jiān)督微調(diào)示例,每個(gè)示例都包含用戶和工具之間的多輪對(duì)話庵佣。
4.5.2 自我指導(dǎo)
專有數(shù)據(jù)集包含幾個(gè)與代碼相關(guān)的任務(wù)示例歉胶。
使用執(zhí)行反饋來(lái)選擇數(shù)據(jù)來(lái)訓(xùn)練我們的指令模型,而不是人工反饋巴粪。我們按照以下方法構(gòu)建自學(xué)數(shù)據(jù)集通今,得到約 14,000 個(gè)問(wèn)題 - 測(cè)試 - 解決方案三元組。
- 通過(guò)提示生成 62,000 個(gè)訪談式編程問(wèn)題 Llama 2 70B验毡。詳見(jiàn)附錄中圖 -9衡创。
- 通過(guò)刪除完全重復(fù)的問(wèn)題來(lái)消除重復(fù)問(wèn)題集,從而產(chǎn)生約 52,000 個(gè)問(wèn)題晶通。
- 對(duì)于每個(gè)問(wèn)題:
- 通過(guò)提示 Code Llama 7B 生成單元測(cè)試(圖 10 中包含提示)璃氢。
- 通過(guò)提示 Code Llama 7B 生成 10 個(gè) Python 解決方案(圖 11)。
- 對(duì)十個(gè)解決方案運(yùn)行單元測(cè)試狮辽。將通過(guò)測(cè)試的第一個(gè)解決方案(及其相應(yīng)的問(wèn)題和測(cè)試)添加到自指導(dǎo)數(shù)據(jù)集一也。
我們使用 Code Llama 7B 來(lái)生成測(cè)試和 Python 解決方案,因?yàn)樽髡甙l(fā)現(xiàn)喉脖,在相同的計(jì)算預(yù)算下椰苟,它比使用 34B 模型為每個(gè)問(wèn)題生成更少的解決方案更有效。
4.5.3 排演
為了防止模型在一般編碼和語(yǔ)言理解能力上倒退树叽,Code Llama - Instruct 還使用來(lái)自代碼數(shù)據(jù)集(6%)和自然語(yǔ)言數(shù)據(jù)集(2%)的一小部分?jǐn)?shù)據(jù)進(jìn)行訓(xùn)練舆蝴。
4.6 訓(xùn)練方法
具體參數(shù)請(qǐng)見(jiàn)論文原文:Training details 部分。
4.7 結(jié)果
主實(shí)驗(yàn)結(jié)果如下,后面還有一些消融實(shí)驗(yàn)洁仗,用于展示文中幾種優(yōu)化的具體效果层皱。
5 相關(guān)工作
相關(guān)工作中列出了其它主流的代碼生成工具,也可以看一下赠潦。