AutoCoder:性能超越GPT-4o的模型,居然只有33B,還是開源!
比GPT4還要厲害的開源模型
圖片
今天這篇論文介紹了一個最新的大語言模型 AutoCoder,一個只有33B的大語言模型。AutoCoder-33B在HumanEval基準測試中Pass@1的達到90.9%,領先于當前所有頂級的代碼生成大型語言模型。在HumanEval+上,它的Pass@1為78%,僅次于GPT-4 Turbo和CodeQwen1.5-Chat。
模型下載地址:https://huggingface.co/Bin12345/AutoCoder
圖片
其中,盡管AutoCoder-S只有6.7B參數,它在HumanEval和HumanEval+上的Pass@1比率依然達到了78.7%和72%。在MBPP和MBPP+基準測試中,它的性能分別為79.4%和69.8%,在MBPP+的測試中,其表現在70B參數級別內僅次于DeepSeek-Coder-instruct (33B)。
為了測試AutoCoder在多種程序語言上的表現,作者采用MultiPL-E基準測試AutoCoder。實驗結果顯示,AutoCoder在Java、C++和Rust語言上的Pass@1成績分別為61.4%、68.9%和60.8%,表現卓越。在其他三種語言上,它的表現也僅次于CodeQwen1.5-Chat等少數模型,彰顯了AutoCoder在多語言代碼生成上的強勁實力。
圖片
為什么AutoCoder這么強?
AutoCoder之所以能強國GPT-4o的原因,是因為作者采用了 AIEV-INSTRUCT方法來構建高質量的代碼指令集數據。
AIEV-INSTRUCT通過智能體(Agent)交互模擬程序員編碼和執行單元測試的過程,并通過執行驗證確保數據的準確性。AIEV-INSTRUCT包含教學階段和自學階段,減少了在數據注釋過程中對成本高昂的閉源模型的依賴。
圖片
上圖展示了AIEV-INSTRUCT的整體架構,分為兩個階段:教學階段和自我學習階段。
- ? 在教學階段,模型主要通過吸收教師模型的知識來學習;
- ? 而在自我學習階段,它則獨立進行學習。
在教學階段,作者收集了開源代碼片段,并引入GPT-4 Turbo作為教師模型,以補充和修正這些代碼。整個流程包含四個關鍵步驟:
- ? 在初始化階段(I),配置了必要的組件,GPT-4 Turbo扮演著提問者和程序員的雙重角色,確保生成的數據多樣化,從而形成一個更加均衡的概率分布,避免對話模板的單一化。對話消息以空列表的形式初始化,用于在整個過程中存儲數據。最終,這個列表將包含多輪對話,并將整個對話作為單一數據項加入到我們的最終數據集中。此外,還需要設置一個Docker容器,作為我們的代碼解釋器,負責安裝必要的外部包并執行需要驗證的代碼。
- ? 在提出問題階段(II),首先利用GPT-4 Turbo執行OSS-Instruct ,構建問題描述和具體解決方案,包括基于開源代碼片段的代碼片段。不同的是,要求GPT-4 Turbo提供一些單元測試,以進一步確保數據集中代碼的準確性。前一步驟中初始化的對話消息將依次添加問題描述(?)、解決方案和單元測試(?)。
- ? 在執行反饋階段(III),通過多輪執行反饋來檢驗生成的代碼,提升數據集的質量。首先,將第二步生成的代碼片段輸入代碼解釋器。如果執行出錯,對話消息將添加詳細的錯誤輸出(Stderr)(?)。同時,這些錯誤信息將提供給提問者,他將基于錯誤輸出生成自然語言描述,該描述也將添加到對話消息中(?)。然后,自然語言描述和錯誤輸出作為新問題提交給程序員,程序員將繼續修改代碼。對話消息將添加新生成的代碼(?),并重復這一過程。
- ? 在終止階段(IV),同樣使用代碼解釋器運行程序員生成的代碼。如果程序運行成功,輸出結果(Stdout)將添加到對話消息中(?),完成單個數據項的分析。每分析2000個數據項后,將新數據按1:9的比例劃分為測試集和訓練集。訓練集用于訓練學生模型(AutoCoder)。訓練完成后,使用測試集來評估教師模型和學生模型。評估完成后,將比較兩個模型的首次通過率(Pass@1)。如果教師模型表現更佳,我將繼續教學階段;如果學生模型表現更佳,將轉向自我學習階段。自我學習階段與教學階段的主要區別在于,自我學習階段中,用學生模型取代了原始的教師模型,學生模型自己擔任提問者和程序員的角色,獨立完成整個執行反饋過程。
圖片
作者將AutoCoder-AIEV-Instruct數據集與幾個現有的大型代碼指令數據集進行了對比,對比結果如上圖。AutoCoder-AIEV-Instruct數據集包含169K個數據樣本,累計達到241K輪對話。其中,150K輪對話數據來源于多輪對話樣本。該數據集不僅包含主要功能,還涵蓋了后續的包安裝、代碼執行錯誤或結果,以及多樣化的錯誤分析。與Magicoder-Evol-Instruct和Magicoder-OSSInstruct原始數據集相比,新增的單元測試進一步提高了代碼相關任務的準確性。此外,與Code-Feedback 相比,AutoCoder-AIEV-Instruct包含了更豐富的執行反饋結果,減少了代碼塊拼接所需的多輪對話,從而增強了上下文的連貫性。
訓練過程
AutoCoder模型的基礎模型是Deepseek-Coder的兩個基礎版本,即6.7B和33B,作者在這兩個模型的基礎上進行了細致的微調,借助AutoCoder-AIEV-Instruct數據集,成功打造出了AutoCoder 33B和AutoCoder-S 6.7B。
為了賦予AutoCoder代碼解釋器的能力,利用transformer庫中的AutoTokenizer工具包,為模型引入了四個特殊標記。硬件配置上,使用了10個節點,配備了總計40塊80GB的A100 GPU,這些GPU部署在一個基于SLURM的集群中。GPU間的通信由NVIDIA的集體通信庫(NCCL)負責。在訓練參數的設置上,使用了deepspeed庫中的ZeRO-Stage 3特性,以實現模型參數的分割,每個GPU的批次大小設為8,梯度累積步數為4,學習率設為5e-5,參數類型選用了bf16。序列的最大長度被設定為5120,而訓練的總周期則為2。整個訓練過程中,采取了全面的參數調優策。
demo演示方法
git clone https://github.com/bin123apple/AutoCoder
conda create -n AutoCoder pythnotallow=3.11
conda activate AutoCoder
pip install -r requirements.txt
cd /Web_demo
pip install -r requirements.txt
python chatbot.py
本文轉載自??大語言模型論文跟蹤??,作者: HuggingAGI ????
