LLMs之Code:Code Llama的簡介、安裝、使用方法之詳細攻略
導讀:2023年08月25日(北京時間),Meta發(fā)布了Code Llama,一個可以使用文本提示生成代碼的大型語言模型(LLM)。Code Llama是最先進的公開可用的LLM代碼任務(wù),并有潛力使工作流程更快,更有效的為當前的開發(fā)人員和降低進入門檻的人正在學習代碼。Code Llama有潛力作為一種生產(chǎn)力和教育工具來幫助程序員編寫更健壯、文檔更完善的軟件。
Code Llama在Llama 2的基礎(chǔ)上增強了編碼能力。它可以從代碼和自然語言提示(例如,“給我寫一個輸出斐波那契數(shù)列的函數(shù)?!?中生成代碼和關(guān)于代碼的自然語言。它也可以用于代碼完成和調(diào)試。它支持許多當今最流行的語言,包括Python、c++、Java、PHP、Typescript (Javascript)、c#和Bash。
>> Code Llama是一個開源的、最先進的LLM,能夠從代碼和自然語言提示中生成代碼和關(guān)于代碼的自然語言。它專注于生成代碼和理解自然語言代碼說明,其性能優(yōu)于當前公開的其他代碼生成LLM,為編程帶來支持,其開源訓練方法有助于社區(qū)建立更多創(chuàng)新工具。
>> Code Llama有三個尺寸的版本,參數(shù)量分別為7B、13B和34B,并支持多種編程語言。它穩(wěn)定支持了最高10萬個token的上下文生成。這三個參數(shù)版本的Code Llama模型都使用了500B的代碼tokens和代碼相關(guān)數(shù)據(jù)進行訓練。7B和13B版本的模型還經(jīng)過了FIM(fill-in-the-middle)訓練,可以將代碼插入到現(xiàn)有代碼中,支持開箱即用的代碼補全等任務(wù)。不同的服務(wù)和延遲要求可以選擇適合的模型版本。例如,7B模型適合在單個GPU上運行,而34B模型提供了更好的編碼輔助和最佳結(jié)果,但速度較慢。對于低延遲任務(wù),比如實時代碼補全,較小的7B和13B模型速度更快。
>> Code Llama建立在Llama 2的基礎(chǔ)上,并通過在代碼特定數(shù)據(jù)集上進行進一步訓練來提升編碼能力。除了基礎(chǔ)模型外,還有針對Python優(yōu)化的Code Llama - Python和理解自然語言指令優(yōu)化的Code Llama - Instruct版本。在代碼生成基準測試中,Code Llama表現(xiàn)優(yōu)于其他公開可用的代碼專用語言模型,性能與ChatGPT相當。
Code Llama的簡介
2023年08月25日,Meta發(fā)布了基于的Llama2用于專攻代碼生成的基礎(chǔ)模型 Code Llama。Code Llama 是基于 Llama 2?的一系列面向代碼的大型語言模型,提供了在開放模型中領(lǐng)先的性能,填充能力,支持大型輸入上下文,以及用于編程任務(wù)的零-shot指令跟隨能力。
該項目提供多個版本以覆蓋廣泛的應(yīng)用領(lǐng)域:基礎(chǔ)模型(Code Llama),Python 專用模型(Code Llama - Python),以及指令跟隨模型(Code Llama - Instruct),分別具有7B、13B和34B的參數(shù)。所有模型都是在16k標記的序列上進行訓練的,并在最多100k標記的輸入上顯示出改進。7B和13B的 Code Llama 和 Code Llama - Instruct 變體支持基于周圍內(nèi)容的填充。
Code Llama 是通過對 Llama 2 進行代碼的更高采樣來進行微調(diào)開發(fā)的。與 Llama 2 一樣,我們對模型的微調(diào)版本應(yīng)用了相當大的安全措施。有關(guān)模型訓練、架構(gòu)和參數(shù)、評估、負責人工智能和安全的詳細信息,請參閱我們的研究論文。由 Llama Materials 的代碼生成功能生成的輸出,包括 Code Llama,在內(nèi)可能受第三方許可證的約束,包括但不限于開源許可證。
我們正在釋放大型語言模型的強大能力,我們的最新版本 Code Llama 現(xiàn)在可以讓個人、創(chuàng)作者、研究人員和各個規(guī)模的企業(yè)獲得使用權(quán)限,以便他們可以負責地進行實驗、創(chuàng)新和擴展他們的想法。此發(fā)布包括預(yù)訓練和微調(diào) Llama 語言模型的模型權(quán)重和初始代碼,參數(shù)范圍從7B到34B。該存儲庫旨在作為一個最小的示例,用于加載 Code Llama 模型并進行推理。
Code Llama 是一項帶有潛在風險的新技術(shù)。到目前為止進行的測試未能覆蓋所有情況。為了幫助開發(fā)人員應(yīng)對這些風險,我們已創(chuàng)建了《負責任使用指南》。更多詳細信息可以在我們的研究論文中找到。
GitHub官網(wǎng):GitHub - facebookresearch/codellama: Inference code for CodeLlama models
論文地址:https://ai.meta.com/research/publications/code-llama-open-foundation-models-for-code/
官網(wǎng)文章:https://ai.meta.com/blog/code-llama-large-language-model-coding/
1、《Code Llama: Open Foundation Models for Code》翻譯與解讀
摘要
我們發(fā)布了Code Llama,這是一系列基于Llama 2的面向代碼的大型語言模型,具有開放模型中最先進的性能、填充能力、支持大型輸入上下文以及零-shot指令跟隨能力,可用于編程任務(wù)。我們提供多種版本以覆蓋廣泛的應(yīng)用領(lǐng)域:基礎(chǔ)模型(Code Llama)、Python專用模型(Code Llama - Python)和指令跟隨模型(Code Llama - Instruct),分別具有7B、13B和34B個參數(shù)。所有模型都是在16k個標記的序列上進行訓練,并在最多100k個標記的輸入上顯示出改進效果。7B和13B的Code Llama和Code Llama - Instruct變種支持基于周圍內(nèi)容的填充。Code Llama在幾個代碼基準測試中達到了開放模型的最先進性能,分別在HumanEval和MBPP上獲得了53%和55%的得分。值得注意的是,Code Llama - Python 7B在HumanEval和MBPP上的表現(xiàn)超過了Llama 2 70B,而我們的所有模型在MultiPL-E上都優(yōu)于其他公開可用的模型。我們以寬松的許可證發(fā)布Code Llama,既允許研究使用,也允許商業(yè)使用。
結(jié)論
我們發(fā)布了一系列專注于代碼的Llama 2模型,稱為Code Llama,包含三個主要變種,我們以三種規(guī)模(7B、13B和34B個參數(shù))發(fā)布:Code Llama、Code Llama - Python和Code Llama - Instruct??紤]到實際應(yīng)用,我們訓練了7B和13B的模型以支持填充,并讓所有模型能夠利用大型上下文。我們在推理中測試它們在最多100K個標記(圖4a)的情況下的穩(wěn)定性。大型上下文微調(diào)和填充在標準基準測試中(表10)的基于從左到右的代碼生成基準測試中有一定的代價,這些測試都基于短序列(即函數(shù)級別)。盡管如此,我們的30B模型在標準Python完成基準測試中是公開模型中最先進的,而我們的其他模型與具有相似參數(shù)數(shù)量的模型相比具有競爭力。在多語言基準測試中,即使是我們最小的模型(Code Llama 7B)也優(yōu)于其他任何公開模型。
Code Llama - Instruct模型經(jīng)過訓練,為Code Llama提供了零-shot指令能力。在這種進一步的微調(diào)中,我們在一定程度上提煉了Llama 2-Chat,不僅注重更直接的幫助(圖5c),還努力提供更安全的模型供使用和部署(第4節(jié))。遵循指令并過于安全可能會在評估中損失一些得分(例如表2中34B模型在HumanEval上的情況),如圖14所示。需要進一步的工作讓LLM能夠理解上下文和指令中的細微差別。
2、模型評估效果對比:HumanEval、MBPP、MHEval
Code Llama表現(xiàn)優(yōu)異
3、基于Code Llama的衍生模型
(1)、Phind團隊:Phind-CodeLlama-34B-v1、Phind-CodeLlama-34B-Python-v1
Phind 團隊利用內(nèi)部Phind數(shù)據(jù)集調(diào)優(yōu)CodeLlama-34B和CodeLlama-34B-Python模型,在HumanEval上超越GPT-4的表現(xiàn)。在該內(nèi)部數(shù)據(jù)集上,兩模型分別獲得67.6%和69.5%的通過率,高于原始模型的48.8%和53.7% 。調(diào)優(yōu)后模型Phind-CodeLlama-34B-v1和Phind-CodeLlama-34B-Python-v1在HumanEval上分別獲得67.6%和69.5%的通過率。顯然都超越了原始 GPT-4 的 67%。
時間
2023年8月27日(北京時間)
作者
Phind團隊
地址
地址:https://www.phind.com/blog/code-llama-beats-gpt4
原文章
通過對CodeLlama-34B和CodeLlama-34B-Python進行微調(diào),我們在內(nèi)部的Phind數(shù)據(jù)集上取得了令人矚目的成績。CodeLlama-34B在HumanEval上的一次通過率為48.8%,而CodeLlama-34B-Python則為53.7%。根據(jù)OpenAI在三月份的官方技術(shù)報告,GPT-4的通過率為67%。為確保結(jié)果的有效性,我們對數(shù)據(jù)集應(yīng)用了OpenAI的去污染方法。
昨天發(fā)布的CodeLlama模型在HumanEval上展現(xiàn)出了出色的性能。
>> Phind-CodeLlama-34B-v1在HumanEval上的一次通過率為67.6%。
>> Phind-CodeLlama-34B-Python-v1在HumanEval上的一次通過率為69.5%。
我們將這兩個模型在一個擁有大約80,000個高質(zhì)量編程問題和解決方案的專有數(shù)據(jù)集上進行了微調(diào)。與HumanEval在結(jié)構(gòu)上不同的是,該數(shù)據(jù)集采用了指令-答案對而不是代碼補全示例。
我們對Phind模型進行了兩個時期的訓練,總共約160,000個示例。我們沒有使用LoRA,這兩個模型都經(jīng)過了本機的微調(diào)。我們使用DeepSpeed ZeRO 3和Flash Attention 2,在32個A100-80GB的GPU上進行訓練,序列長度為4096個標記,訓練時間為三個小時。
此外,我們還應(yīng)用了OpenAI的去污染方法來確保結(jié)果的有效性,并且沒有發(fā)現(xiàn)任何受污染的示例。該方法如下所示:
>> 對于每個評估示例,我們隨機抽樣了三個50個字符的子字符串,如果示例少于50個字符,則使用整個示例。
>> 如果任何抽樣的子字符串是處理過的訓練示例的子字符串,則認為存在匹配。
有關(guān)去污染方法的更多信息,請參閱OpenAI技術(shù)報告附錄C。下面是我們在微調(diào)模型中實現(xiàn)的一次通過率得分:
>> Phind-CodeLlama-34B-v1在HumanEval上的一次通過率為67.6%。
>> Phind-CodeLlama-34B-Python-v1在HumanEval上的一次通過率為69.5%。
(2)、WizardLM團隊:WizardCoder
WizardLM 團隊發(fā)布了基于Code Llama的最新WizardCoder-34B。WizardCoder-34B在HumanEval上的一次通過率(pass@1)達到了驚人的 73.2%,超越了原始 GPT-4、ChatGPT-3.5 以及 Claude 2、Bard。
為了開發(fā)我們的WizardCoder模型,我們首先采用了Evol-Instruct方法,專門針對編碼任務(wù)進行了適應(yīng)。這包括將提示信息定制為與代碼相關(guān)的指令領(lǐng)域。隨后,我們使用新創(chuàng)建的指令跟隨訓練集對Code LLama的模型進行了微調(diào),包括StarCoder或Code LLama。
時間
2023年8月27日(北京時間)
作者
WizardLM 團隊
地址
GitHub地址:https://github.com/nlpxucan/WizardLM/tree/main/WizardCoder
測試地址:WizardCoder-Python-34B-V1.0
Code Llama的安裝
1、模型部署與推理
第1步,獲取Meta 官網(wǎng)授權(quán)
為了下載模型權(quán)重和分詞器,請訪問 Meta AI 網(wǎng)站并接受我們的許可協(xié)議。
一旦您的請求獲得批準,您將收到一封帶有簽名的電子郵件鏈接。
第2步,sh腳本下載
下載腳本
然后運行 download.sh 腳本,在提示時傳遞提供的 URL 開始下載。請確保復(fù)制 URL 文本本身,不要使用右鍵單擊 URL 時的“復(fù)制鏈接地址”選項。如果復(fù)制的 URL 文本以 https://download.llamameta.net開頭,則復(fù)制正確。如果復(fù)制的 URL 文本以 https://l.facebook.com開頭,則復(fù)制錯誤。
先決條件
先決條件:確保您已安裝 wget 和 md5sum。然后運行腳本:bash download.sh。
請注意,鏈接在24小時后和一定數(shù)量的下載后會過期。如果您開始看到諸如 403:Forbidden 的錯誤,您始終可以重新請求鏈接。
設(shè)置
在具有 PyTorch / CUDA 的 conda 環(huán)境中,克隆存儲庫并在頂級目錄中運行:
pip install -e .
第3步,模型推理
不同的模型需要不同的模型并行(MP)值
Model
MP
7B
1
13B
2
34B
4
所有模型都支持長達100,000標記的序列長度,但我們根據(jù) max_seq_len 和 max_batch_size 值預(yù)先分配緩存。因此根據(jù)您的硬件和用例設(shè)置這些值。
2、預(yù)訓練
Code Llama 和 Code Llama - Python 模型沒有經(jīng)過微調(diào)以遵循指令。它們應(yīng)該通過提示來獲取期望的答案,即提示的自然延續(xù)。請參考 example_completion.py 查看一些示例。為了說明,查看下面的命令,以使用 CodeLlama-7b 模型運行它(nproc_per_node 需要設(shè)置為 MP 值):
torchrun --nproc_per_node 1 example_completion.py--ckpt_dir CodeLlama-7b/--tokenizer_path CodeLlama-7b/tokenizer.model--max_seq_len 128 --max_batch_size 4 預(yù)訓練的代碼模型包括:Code Llama 模型 CodeLlama-7b、CodeLlama-13b、CodeLlama-34b,以及 Code Llama - Python 模型 CodeLlama-7b-Python、CodeLlama-13b-Python、CodeLlama-34b-Python。
3、代碼填充
Code Llama 和 Code Llama - Instruct 7B 和 13B 模型能夠根據(jù)周圍上下文填充代碼。
請參考 example_infilling.py 查看一些示例??梢允褂靡韵旅钸\行 CodeLlama-7b 模型以進行填充(nproc_per_node 需要設(shè)置為 MP 值):
torchrun --nproc_per_node 1 example_infilling.py--ckpt_dir CodeLlama-7b/--tokenizer_path CodeLlama-7b/tokenizer.model--max_seq_len 192 --max_batch_size 4 預(yù)訓練的填充模型包括:Code Llama 模型 CodeLlama-7b 和 CodeLlama-13b,以及 Code Llama - Instruct 模型 CodeLlama-7b-Instruct、CodeLlama-13b-Instruct。
4、微調(diào)指令模型
Code Llama - Instruct 模型經(jīng)過微調(diào)以遵循指令。為了獲得預(yù)期的特性和性能,需要遵循 chat_completion 中定義的特定格式,包括 INST 和 <<SYS>> 標簽,BOS 和 EOS 標記,以及之間的空格和換行符(我們建議在輸入上調(diào)用 strip() 以避免雙空格)。
您還可以部署附加分類器,以過濾出被認為不安全的輸入和輸出。請參閱 llama-recipes 存儲庫,了解如何將安全檢查器添加到推理代碼的輸入和輸出中的示例。
使用 CodeLlama-7b-Instruct 的示例:
torchrun --nproc_per_node 1 example_instructions.py--ckpt_dir CodeLlama-7b-Instruct/--tokenizer_path CodeLlama-7b-Instruct/tokenizer.model--max_seq_len 512 --max_batch_size 4 經(jīng)過微調(diào)的指令跟隨模型包括:Code Llama - Instruct 模型 CodeLlama-7b-Instruct、CodeLlama-13b-Instruct、CodeLlama-34b-Instruct。
Code Llama的使用方法
更新中……