最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Code Llama:Llama 2 學(xué)會(huì)寫代碼了!

2023-09-07 21:50 作者:HuggingFace  | 我要投稿

引言

Code Llama 是為代碼類任務(wù)而生的一組最先進(jìn)的、開放的 Llama 2 模型,我們很高興能將其集成入 Hugging Face 生態(tài)系統(tǒng)!Code Llama 使用與 Llama 2 相同的社區(qū)許可證,且可商用。

今天,我們很高興能發(fā)布 Hugging Face 對(duì) Code Llama 的全面支持 , 包括:

  • Hub 上的模型支持,包括模型卡及許可證

  • Transformers 已集成 Code Llama

  • TGI 已集成 Code Llama,以支持對(duì)其進(jìn)行快速高效的產(chǎn)品級(jí)推理

  • 推理終端 (Inference Endpoints) 已集成 Code Llama

  • 對(duì) Code Llama 的代碼基準(zhǔn)測(cè)試結(jié)果已發(fā)布

代碼大語(yǔ)言模型的發(fā)展對(duì)于軟件工程師來(lái)說(shuō)無(wú)疑是振奮人心的,因?yàn)檫@意味著他們可以通過 IDE 中的代碼補(bǔ)全功能來(lái)提高生產(chǎn)力,并利用其來(lái)處理重復(fù)或煩人的任務(wù),例如為代碼編寫文檔字符串或創(chuàng)建單元測(cè)試。

目錄

  • 引言

  • 目錄

  • Code Llama 簡(jiǎn)介

  • 如何使用 Code Llama?

    • 代碼補(bǔ)全

    • 代碼填充

    • 對(duì)話式指令

    • 4 比特加載

    • 演示

    • Transformers

    • 使用 TGI 和推理終端

  • 評(píng)估

  • 其他資源

Code Llama 簡(jiǎn)介

Code Llama 包含 3 個(gè)不同參數(shù)量的版本,分別為: 7 億參數(shù)版、13 億參數(shù)版 以及 340 億參數(shù)版。在訓(xùn)練基礎(chǔ)模型時(shí),先用同等參數(shù)量的 Llama 2 模型初始化權(quán)重,然后在 5000 億詞元的代碼數(shù)據(jù)集上訓(xùn)練。 Meta 還對(duì)訓(xùn)得的基礎(chǔ)模型進(jìn)行了兩種不同風(fēng)格的微調(diào),分別為: Python 專家版 (再加 1000 億個(gè)額外詞元) ; 以及指令微調(diào)版,其可以理解自然語(yǔ)言指令。

這些模型在 Python、C++、Java、PHP、C#、TypeScript 和 Bash 中都展現(xiàn)出最先進(jìn)的性能。7B 和 13B 基礎(chǔ)版和指令版支持完形填空,因此非常適合用作代碼助手。

Code Llama 基于 16k 上下文窗口訓(xùn)練。此外,這三個(gè)尺寸的模型還進(jìn)行了額外的長(zhǎng)上下文微調(diào),使其上下文窗口最多可擴(kuò)展至 10 萬(wàn)詞元。

受益于 RoPE 擴(kuò)展方面的最新進(jìn)展,將 Llama 2 的 4k 上下文窗口增加到 Code Llama 的 16k (甚至可以外插至 100k) 成為可能。社區(qū)發(fā)現(xiàn)可以對(duì) Llama 的位置嵌入進(jìn)行線性插值或頻域插值,這使得通過微調(diào)讓基礎(chǔ)模型輕松擴(kuò)展到更大的上下文窗口成為可能。在 Code Llama 中,他們把頻域縮放和松弛技術(shù)二者結(jié)合起來(lái): 微調(diào)長(zhǎng)度是縮放后的預(yù)訓(xùn)練長(zhǎng)度的一小部分。這個(gè)做法賦予了模型強(qiáng)大的外推能力。

訓(xùn)練過程

第一步是在 5000 億詞元的公開代碼數(shù)據(jù)集上訓(xùn)練出一個(gè)模型。該數(shù)據(jù)集中除了有代碼數(shù)據(jù)集外,還包含一些自然語(yǔ)言數(shù)據(jù)集,例如有關(guān)代碼和代碼片段的討論,且最終數(shù)據(jù)集是使用近似去重法去過重的。不幸的是,Meta 沒有披露有關(guān)該數(shù)據(jù)集的更多信息。

在對(duì)模型進(jìn)行指令微調(diào)時(shí),使用了兩個(gè)數(shù)據(jù)集: 為 Llama 2 Chat 收集的指令微調(diào)數(shù)據(jù)集和自指令數(shù)據(jù)集。自指令數(shù)據(jù)集收集了 Llama 2 編制出的編程面試問題,然后使用 Code Llama 生成單元測(cè)試和解答,最后通過執(zhí)行測(cè)試來(lái)評(píng)估解答。

如何使用 Code Llama?

Transformers 從 4.33 版開始支持 Code Llama。在此之前,需要從主分支進(jìn)行源代碼安裝才行。

演示

我們準(zhǔn)備了 這個(gè) Space 或下面的 Playground 以供大家嘗試 Code Llama 模型 (130 億參數(shù)!):

這個(gè)演示背后使用了 Hugging Face TGI,HuggingChat 也用了相同的技術(shù),具體內(nèi)容見下文。

你還可以玩玩 這個(gè)聊天機(jī)器人,或者復(fù)制一份到自己的賬號(hào)下以供你使用 – 它是自含的,因此你可以隨心所欲地修改代碼!

Transformers

從最新發(fā)布的 transformers 4.33 開始,你可以在 Code Llama 上應(yīng)用 HF 生態(tài)系統(tǒng)中的所有工具,例如:

  • 訓(xùn)練和推理腳本和示例

  • 安全的文件格式 (safetensors )

  • bitsandbytes (4 比特量化) 和 PEFT 等工具結(jié)合使用

  • 運(yùn)行模型生成所需的工具及輔助代碼

  • 導(dǎo)出模型以進(jìn)行部署的機(jī)制

transformers 4.33 發(fā)布之前,用戶需要從主分支源碼安裝 transformers 。

代碼補(bǔ)全

我們可以使用 7B 和 13B 模型進(jìn)行文本/代碼補(bǔ)全或填充。下述代碼演示了如何使用 pipeline 接口來(lái)進(jìn)行文本補(bǔ)全。運(yùn)行時(shí),只需選擇 GPU 即可在 Colab 的免費(fèi) GPU 上運(yùn)行。

Code Llama 雖然專精于代碼理解,但其仍是一個(gè)語(yǔ)言模型。你仍然可以使用相同的生成策略來(lái)自動(dòng)完成注釋或自然語(yǔ)言文本。

代碼填充

這是代碼模型才能完成的專門任務(wù)。該模型經(jīng)過訓(xùn)練后,可以生成與給定上下文最匹配的代碼 (包括注釋)。這是代碼助理的典型使用場(chǎng)景: 要求它們根據(jù)上下文填充當(dāng)前光標(biāo)處的代碼。

此任務(wù)需要使用 7B 和 13B 的 基礎(chǔ)指令 模型。任何 34B 或 Python 版模型不能用于此任務(wù)。

填充類任務(wù)需要在生成時(shí)使用與訓(xùn)練時(shí)相同格式的輸入文本,因?yàn)橛?xùn)練時(shí)會(huì)使用特殊的分隔符來(lái)區(qū)分提示的不同部分。幸運(yùn)的是, transformersCodeLlamaTokenizer 已經(jīng)幫你把這事做了,如下所示:?

在底層,分詞器會(huì) 自動(dòng)按 <fill_me> 分割 并生成一個(gè)格式化的輸入字符串,其格式與 訓(xùn)練時(shí)的格式 相同。這樣做既避免了用戶自己格式化的很多麻煩,也避免了一些很難調(diào)試的陷阱,例如詞元粘合 (token glueing)。

對(duì)話式指令

如上所述,基礎(chǔ)模型可用于補(bǔ)全和填充。Code Llama 還包含一個(gè)適用于對(duì)話場(chǎng)景的指令微調(diào)模型。

為此類任務(wù)準(zhǔn)備輸入時(shí),我們需要一個(gè)提示模板。一個(gè)例子是我們?cè)?Llama 2 博文 中描述的模板,如下:?

請(qǐng)注意,系統(tǒng)提示 ( system prompt ) 是可選的 - 沒有它模型也能工作,但你可以用它來(lái)進(jìn)一步指定模型的行為或風(fēng)格。例如,如果你希望獲得 JavaScript 的答案,即可在此聲明。在系統(tǒng)提示之后,你需要提供對(duì)話交互歷史: 用戶問了什么以及模型回答了什么。與填充場(chǎng)景一樣,你需要注意分隔符的使用。輸入的最后必須是新的用戶指令,這對(duì)模型而言是讓其提供答案的信號(hào)。

以下代碼片段演示了如何在實(shí)際工作中使用該模板。

  1. 首次用戶輸入,無(wú)系統(tǒng)提示

2. 首次用戶查詢,有系統(tǒng)提示

3. 含對(duì)話歷史的多輪對(duì)話

該過程與 Llama 2 中的過程相同。為了最清楚起見,我們沒有使用循環(huán)或泛化此示例代碼:?

4 比特加載

將 Code Llama 集成到 Transformers 中意味著我們可以立即獲得 4 比特加載等高級(jí)功能的支持。這使得用戶可以在英偉達(dá) 3090 卡等消費(fèi)類 GPU 上運(yùn)行大型的 32B 參數(shù)量模型!

以下是在 4 比特模式下運(yùn)行推理的方法:?

使用 TGI 和推理終端

TGI 是 Hugging Face 開發(fā)的生產(chǎn)級(jí)推理容器,可用于輕松部署大語(yǔ)言模型。它包含連續(xù)批處理、流式輸出、基于張量并行的多 GPU 快速推理以及生產(chǎn)級(jí)的日志記錄和跟蹤等功能。

你可以在自己的基礎(chǔ)設(shè)施上使用 TGI,也可以使用 Hugging Face 的 推理終端。要部署 Codellama 2 模型,請(qǐng)登陸其 模型頁(yè)面,然后單擊 Deploy -> Inference Endpoints 按鈕。

  • 推理 7B 模型,我們建議選擇“GPU [medium] - 1x Nvidia A10G”。

  • 推理 13B 模型,我們建議選擇“GPU [xlarge] - 1x Nvidia A100”。

  • 推理 34B 模型,我們建議啟用 bitsandbytes 量化并選擇“GPU [1xlarge] - 1x Nvidia A100”或“GPU [2xlarge] - 2x Nvidia A100”

注意: 你可能需要發(fā)郵件給 api-enterprise@huggingface.co 申請(qǐng)配額升級(jí)才能訪問 A100

你可以在我們的博文中詳細(xì)了解如何 使用 Hugging Face 推理終端部署 LLM,該 博文 還包含了有關(guān)其支持的超參以及如何使用 Python 和 Javascript API 流式生成文本的相關(guān)知識(shí)。

評(píng)估

代碼語(yǔ)言模型通常在 HumanEval 等數(shù)據(jù)集上進(jìn)行基準(zhǔn)測(cè)試,其包含了一系列編程題,我們將函數(shù)簽名和文檔字符串輸入給模型,模型需要完成函數(shù)體代碼的編寫。接著是運(yùn)行一組預(yù)定義的單元測(cè)試來(lái)驗(yàn)證所提出的解答。最后是報(bào)告通過率,即有多少解答通過了所有測(cè)試。pass@1 度量了模型一次生成即通過的頻率,而 pass@10 描述了模型生成 10 個(gè)候選解答其中至少有一個(gè)解答通過的頻率。

雖然 HumanEval 是一個(gè) Python 基準(zhǔn)測(cè)試,但社區(qū)付出了巨大努力將其轉(zhuǎn)成更多編程語(yǔ)言,從而實(shí)現(xiàn)更全面的評(píng)估。其中一種方法是 MultiPL-E,它將 HumanEval 翻譯成十多種編程語(yǔ)言。我們正在基于其制作一個(gè) 多語(yǔ)言代碼排行榜,這樣社區(qū)就可以用它來(lái)比較不同模型在各種編程語(yǔ)言上的表現(xiàn),以評(píng)估哪個(gè)模型最適合他們的需求。

注意: 上表中的分?jǐn)?shù)來(lái)自我們的代碼排行榜,所有模型均使用相同的設(shè)置。欲了解更多詳情,請(qǐng)參閱 排行榜。

其他資源

  • Hub 上的模型

  • 論文

  • Meta 官宣博文

  • 負(fù)責(zé)任使用指南

  • 演示 (代碼補(bǔ)全,流式生成)

  • 演示 (指令微調(diào)、自含、可復(fù)制到自己的空間并修改)

英文原文: https://hf.co/blog/codellama

原文作者: Philipp Schmid,Omar Sanseviero,Pedro Cuenca,Lewis Tunstall,Leandro von Werra,Loubna Ben Allal,Arthur Zucker,Joao Gante

譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向?yàn)?transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理。

審校/排版: zhongdongy (阿東)


Code Llama:Llama 2 學(xué)會(huì)寫代碼了!的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
云阳县| 宣化县| 七台河市| 桃园县| 克东县| 葵青区| 宣武区| 沅江市| 汽车| 高青县| 南陵县| 新和县| 荔波县| 东明县| 龙州县| 乐陵市| 岢岚县| 嘉祥县| 界首市| 农安县| 德惠市| 九台市| 建德市| 平乡县| 临西县| 玛曲县| 伊吾县| 衢州市| 正蓝旗| 同江市| 东辽县| 新巴尔虎左旗| 萝北县| 蓝田县| 通道| 芷江| 灯塔市| 广丰县| 哈尔滨市| 扎赉特旗| 舟曲县|