150億參數(shù)、一次通過率超60%,華為代碼能力超GPT3.5的大模型來了
隨著大模型成為 AI 開發(fā)新范式,將大語言模型集成至編程領域、完成代碼生成與補全任務成為重要趨勢之一。業(yè)界出現(xiàn)了一些引人矚目的代碼大模型,比如 OpenAI 的 CodeX、谷歌 DeepMind 的 AlphaCode、HuggingFace 的 StarCoder 等等。
在國內,去年 7 月底,華為諾亞方舟實驗室語音語義實驗室聯(lián)合華為云 PaaS 技術創(chuàng)新實驗室推出了其代碼大模型 PanGu-Coder。與 Codex 和 AlphaCode 相比,該模型在代碼生成的一次通過率(PASS@1)指標上大幅超越同等參數(shù)規(guī)模的模型,甚至優(yōu)于規(guī)模更大的模型。除了英文外,PanGu-Coder 在中文上表現(xiàn)出色。
PanGu-Coder 模型大小和配置。
根據(jù)對 PanGu-Coder 的相關內測表現(xiàn),它不僅熟悉常見算法,而且能熟練地使用各種 API,求解高等數(shù)學問題也不在話下。
一年過去了,PanGu-Coder2 終于來了,論文已在 arXiv 上提交。此次華為云、中國科學院和北京大學的研究者聯(lián)合帶來了更強大的代碼生成大模型。
論文地址:https://arxiv.org/pdf/2307.14936.pdf
為了增強預訓練代碼大模型的生成性能,各種各樣的方法被提出并應用,比如監(jiān)督微調、指令調整、增強學習(RL)等。在本文中,針對現(xiàn)有基于 RL 方法所存在的問題并進一步挖掘代碼大模型的潛力,研究者提出了一種全新的 RRTF 框架,它的全稱為 Rank Responses to align Test&Teacher Feedback,成功地在代碼大模型上應用自然語言 LLM 對齊技術。
就其思路而言,RRTF 框架有別于以往的 CodeRL 和 RLTF,而是遵循了 RLHF(基于人類反饋的強化學習)的思路,使用排序響應(代替獎勵模型的絕對值)作為反饋,實現(xiàn)了更簡單和高效的訓練方法。
研究者將 RRTF 應用于開源的 StarCoder 15B 上,并推出了一個在所有已發(fā)布代碼大模型中實現(xiàn)最佳性能的 PanGu-Coder2。該模型在 OpenAI HumanEval 基準上實現(xiàn)了 62.20% 的 pass@1 指標,相較 PanGu-Coder 3 億參數(shù)版本的 17.07% 有了顯著提升。
不僅如此,在 CoderEval 和 LeetCode 基準上的廣泛評估結果表明,PanGu-Coder2 超越了以往所有的代碼大模型。
方法概覽
RRTF 框架
研究者們提出了一個更簡單但是功能強大的框架 RRTF,它將幾種前沿技術無縫結合,包括指令調優(yōu)、Evol-Instruct 方法以及強化學習。本次方法的核心理念是:利用測試信號和人類偏好共同作為反饋,對響應進行排序,從而引導模型生成更高質量的代碼。
因此,受最近大型自然語言模型與指令微調取得的進展啟發(fā),研究者提出了這一新的訓練范式,即 RRTF 框架??蚣芨庞[如下圖所示。
RRTF 包括以下三個步驟:采樣、排序和訓練。
- 采樣階段:通過 Evol-Instruct 生成的 prompt 對響應性進行采樣。
- 排序階段:根據(jù)單元測試和啟發(fā)式偏好對不同來源的響應進行排序。
- 訓練階段:使用 prompt 三元組和被選用 / 被拒絕響應的相應分數(shù)來訓練代碼大模型。
模型架構
基于具有 Multi-Query-AttentionShazeer 的 decoder-only Transformer,研究者訓練出一個 15B 參數(shù)的 PanGu-Coder2。同時利用 FlashAttention 來減少計算量和內存占用。因此,該模型的最大長度可以擴展到 8192。下表 1 顯示了該模型的詳細超參數(shù)。
訓練語料庫
由于手動收集高質量語料庫耗時耗力,研究者遵循 Evol-Instruct 技術來構建其訓練語料庫。具體來講,他們基于 Alpaca 20K 數(shù)據(jù)集,并迭代進化該數(shù)據(jù)集中的編程問題,從而獲得新的編程問題。prompt 如下圖 2 所示。
針對這些問題,研究者從不同模型中采樣了答案??偟膩碚f,他們收集了一個包含 100K 個有答案編程問題的原始語料庫,并把它稱為指令和解答方案對(instruction and solution pairs)。然后利用一些手動定義的規(guī)則在原始語料庫上進行數(shù)據(jù)預處理,將其規(guī)??s小至 68K。
更重要的,為了防止數(shù)據(jù)泄露,研究者花大力氣調查了其 68K 數(shù)據(jù)集與 HumanEval 基準之間的潛在重疊。經(jīng)過細致的調查,他們確信其實驗中無數(shù)據(jù)泄露,進一步驗證了 PanGu-Coder2 的有效性。
實現(xiàn)細節(jié)
研究者選擇 StarCoder 15B 作為基礎模型,并以 512 的全局批大小對其進行 6 epoch 訓練。圖 3 展示了單個訓練樣本的格式。除了在 prompt 中添加一對三引號外,研究者只使用從響應中提取的代碼片段進行訓練。
實驗及評估
研究團隊進行了一系列的實驗來評估 PanGu-Coder2 的性能。
性能
該研究將 PanGu-Coder2 與現(xiàn)有的代碼大模型在 Python 代碼生成方面進行了性能比較。下表 2 顯示了在 HumanEval 基準上的比較結果。
在所有閉源模型中,PanGu-Coder2 排名第二。與 PaLM-Coder 和 LaMDA 等大模型相比,PanGu-Coder2 雖然規(guī)模較小,但性能卻更好。值得注意的是,PanGu-Coder2 的表現(xiàn)優(yōu)于 OpenAI 的 GPT-3.5,但與 GPT-4 仍有差距。
表 3 展示了貪婪解碼的比較結果。在所有基準測試中,PanGuCoder2 都取得了最好的成績。值得注意的是,PanGu-Coder2 不僅在 HumanEval 上超過了 WizardCoder 和 StarCoder,而且在 CoderEval 和 LeetCode 上也超過了這兩個模型。
表 2 和表 3 的實驗結果可以得出以下結論:
- 在開源模型中,PanGu-Coder2 在 HumanEval 上以 61.64% pass@1 達到了 SOTA。
- 盡管 PanGu-Coder2 的規(guī)模較小,但其性能卻優(yōu)于 PaLM-Coder 和 LaMDA 等更大規(guī)模的模型。
- PanGu-Coder2 是實驗中唯一同時在 HumanEval、CoderEval 和 LeetCode 上都達到最佳性能的模型。
如下圖 4 所示,整體準確率隨著數(shù)據(jù)集大小的增加而增加:
在訓練計算量方面,無論數(shù)據(jù)集大小如何,準確率可能會在訓練開始時急劇下降或持平。大約 2 個 epoch 后,訓練曲線變得更加穩(wěn)定,準確率隨著損失的減少而持續(xù)上升。3 個 epoch 后,準確率達到最佳,而 4 個 epoch 后,準確率變得更加穩(wěn)定,顯示出收斂的跡象。這表明,PanGu-Coder2 模型大約需要 3-4 個 epoch 才能完全捕捉到數(shù)據(jù)集中的知識,而之后的訓練步驟對提高模型能力的幫助可能微乎其微。
用例研究
為了對模型進行實證研究并分析未來的工作方向,該研究比較和分析了三個模型的成功和失敗案例:基礎模型 StarCoder、指令調整模型 WizardCoder 和 PanGu-Coder2 模型。下圖 5 顯示了三種模型在貪婪解碼(greedy decoding)和核采樣(nucleus sampling)方面的異同:
圖 5 還表明 PanGu-Coder2 和 WizardCoder 可以互補:雖然 PanGu-Coder2 解決了大部分問題,并且其中一些問題是 WizardCoder 無法解決的,但也有一些問題只能通過 WizardCoder 解決。此外,還有一些問題即使采樣 200 次,這三個模型也都無法解決。
該研究選擇 StarCoder、WizardCoder 和 PanGu-Coder2 生成的幾個具有代表性的示例代碼作為案例進行研究,以對 PanGu-Coder2 的優(yōu)缺點進行評估。
如下圖 6 所示,PanGu-Coder2 能夠熟練地理解編程問題的邏輯,而 WizardCoder 和 StarCoder 在這方面有所欠缺。這一觀察結果表明,PanGu-Coder2 通過該研究提出的排名反饋,有效地在編程問題陳述和代碼解決方案之間建立了細致的映射。
如下圖 7 所示,在某些情況下,PanGu-Coder2 和 StarCoder 的性能差于 WizardCoder,WizardCoder 可能受益于使用大量豐富注釋代碼指令進行訓練。在某種程度上,這一觀察表明,引入注釋數(shù)據(jù)可能會在訓練過程中產(chǎn)生積極效果。
此外,下圖 8 給出了一個復雜的編程挑戰(zhàn),StarCoder、WizardCoder 和 PanGu-Coder2 都給出了錯誤的代碼解決方案。這一觀察結果表明,目前代碼大模型在處理復雜編程要求方面仍達不到人類的熟練程度,還有一些改進的空間。
推理優(yōu)化
GPU 內存消耗和推理速度是模型實際部署和使用的關鍵因素,因此該研究使用 CTranslate2 和 GPTQ 兩種量化技術來進行實驗,研究模型推理的優(yōu)化策略。下表 4 展示了使用不同量化技術優(yōu)化的模型的 GPU 內存消耗、推理速度和 HumanEval 性能。