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

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

Falcon 登陸 Hugging Face 生態(tài)

2023-06-16 21:52 作者:HuggingFace  | 我要投稿

引言

Falcon 是由位于阿布扎比的 技術(shù)創(chuàng)新研究院 (Technology Innovation Institute, TII) ?創(chuàng)建的一系列的新語言模型,其基于 Apache 2.0 許可發(fā)布。值得注意的是,F(xiàn)alcon-40B 是首個“真正開放”的模型,其能力可與當前許多閉源模型相媲美。這對從業(yè)者、愛好者和行業(yè)來說都是個好消息,因為“真開源”使大家可以毫無顧忌地基于它們探索百花齊放的應用。

本文,我們將深入探討 Falcon 模型: 首先探討它們的獨特之處,然后?展示如何基于 Hugging Face 生態(tài)提供的工具輕松構(gòu)建基于 Falcon 模型的多種應用 (如推理、量化、微調(diào)等)?。

目錄

  • Falcon 模型

  • 演示

  • 推理

  • 評估

  • 用 PEFT 微調(diào)模型

  • 總結(jié)

Falcon 模型

Falcon 家族有兩個基礎模型: Falcon-40B 及其小兄弟 Falcon-7B。40B 參數(shù)模型目前在 Open LLM 排行榜 中名列前茅,而 7B 模型在同等參數(shù)量的模型中表現(xiàn)最佳。

運行 Falcon-40B 需要約 90GB 的 GPU 顯存 —— 雖然還是挺多的,但比 LLaMA-65B 少了不少,況且 Falcon-40B 的性能還優(yōu)于 LLaMA-65B。而 Falcon-7B 只需要約 15GB 顯存,即使在消費類硬件上也可以進行推理和微調(diào)。(我們將在后文討論如何使用量化技術(shù)在便宜的 GPU 上使用 Falcon-40B!)

TII 還提供了經(jīng)過指令微調(diào)的模型: Falcon-7B-Instruct 以及 Falcon-40B-Instruct。這兩個實驗性的模型變體經(jīng)由指令和對話數(shù)據(jù)微調(diào)而得,因此更適合當前流行的助理式任務。如果你只是想把 Falcon 模型快速用起來,這兩個模型是最佳選擇。?當然你也可以基于社區(qū)構(gòu)建的大量數(shù)據(jù)集微調(diào)一個自己的模型 —— 后文會給出微調(diào)步驟!

Falcon-7B 和 Falcon-40B 分別基于 1.5 萬億和 1 萬億詞元數(shù)據(jù)訓練而得,其架構(gòu)在設計時就充分考慮了推理優(yōu)化。Falcon 模型質(zhì)量較高的關鍵在于訓練數(shù)據(jù),其 80% 以上的訓練數(shù)據(jù)來自于 RefinedWeb —— 一個新的基于 CommonCrawl 的網(wǎng)絡數(shù)據(jù)集。TII 選擇不去收集分散的精選數(shù)據(jù),而是專注于擴展并提高 Web 數(shù)據(jù)的質(zhì)量,通過大量的去重和嚴格過濾使所得語料庫與其他精選的語料庫質(zhì)量相當。在訓練 Falcon 模型時,雖然仍然包含了一些精選數(shù)據(jù) (例如來自 Reddit 的對話數(shù)據(jù)),但與 GPT-3 或 PaLM 等最先進的 LLM 相比,精選數(shù)據(jù)的使用量要少得多。你知道最妙的是什么嗎?TII 公布了從 RefinedWeb 中提取出的含有 6000 億詞元的數(shù)據(jù)集,以供社區(qū)在自己的 LLM 中使用!

Falcon 模型的另一個有趣的特性是其使用了?多查詢注意力 (multiquery attention)。原始多頭 (head) 注意力方案每個頭都分別有一個查詢 (query) 、鍵 (key) 以及值 (value),而多查詢注意力方案改為在所有頭上共享同一個鍵和值。

多查詢注意力機制在注意力頭之間共享同一個鍵嵌入和值嵌入。圖片由 Harm de Vries 提供。

這個技巧對預訓練影響不大,但它極大地 提高了推理的可擴展性: 事實上,?該技巧大大減少了自回歸解碼期間 K,V 緩存的內(nèi)存占用,將其減少了 10-100 倍?(具體數(shù)值取決于模型架構(gòu)的配置),這大大降低了模型推理的內(nèi)存開銷。而內(nèi)存開銷的減少為解鎖新的優(yōu)化帶來了可能,如省下來的內(nèi)存可以用來存儲歷史對話,從而使得有狀態(tài)推理成為可能。

  • 上表中得分均為經(jīng)過微調(diào)的模型的得分

演示

通過 這個 Space 或下面的應用,你可以很輕松地試用一下大的 Falcon 模型 (400 億參數(shù)!):


請點擊?閱讀原文?查看交互式示例。

上面的應用使用了 Hugging Face 的 Text Generation Inference 技術(shù),它是一個可擴展的、快速高效的文本生成服務,使用了 Rust、Python 以及 gRPC 等技術(shù)。HuggingChat 也使用了相同的技術(shù)。

我們還構(gòu)建了一個 Core ML 版本的?falcon-7b-instruct?模型,你可以通過以下方式將其運行至 M1 MacBook Pro:


該視頻展示了一個輕量級應用程序,該應用程序利用一個 Swift 庫完成了包括加載模型、分詞、準備輸入數(shù)據(jù)、生成文本以及解碼在內(nèi)的很多繁重的操作。我們正在快馬加鞭構(gòu)建這個庫,這樣開發(fā)人員就能基于它將強大的 LLM 集成到各種應用程序中,而無需重新發(fā)明輪子。目前它還有點粗糙,但我們迫不及待地想讓它早點面世。同時,你也可以下載 Core ML 的權(quán)重文件 自己探索!

推理

在使用熟悉的 transformers API 在你自己的硬件上運行 Falcon 模型時,你需要注意幾個以下細節(jié):

  • 現(xiàn)有的模型是用?bfloat16?數(shù)據(jù)類型訓練的,因此建議你也使用相同的數(shù)據(jù)類型來推理。使用?bfloat16?需要你安裝最新版本的 CUDA,而且?bfloat16?在最新的卡 (如 A100) 上效果最好。你也可以嘗試使用?float16?進行推理,但請記住,目前我們分享的模型效果數(shù)據(jù)都是基于?bfloat16?的。

  • 你需要允許遠程代碼執(zhí)行。這是因為?transformers?尚未集成 Falcon 模型架構(gòu),所以,我們需要使用模型作者在其代碼庫中提供的代碼來運行。以?falcon-7b-instruct?為例,如果你允許遠程執(zhí)行,我們將使用下列文件里的代碼來運行模型: configuration_RW.py,modelling_RW.py。

綜上,你可以參考如下代碼來使用 transformers 的?pipeline?API 加載?falcon-7b-instruct?模型:

然后,再用如下代碼生成文本:

最后,你可能會得到如下輸出:

Valencia,?city?of?the?sun
The?city?that?glitters?like?a?star
A?city?of?a?thousand?colors
Where?the?night?is?illuminated?by?stars
Valencia,?the?city?of?my?heart
Where?the?past?is?kept?in?a?golden?chest

對 Falcon 40B 進行推理

因為 40B 模型尺寸比較大,所以要把它運行起來還是挺有挑戰(zhàn)性的,單個顯存為 80GB 的 A100 都放不下它。如果用 8 比特模型的話,需要大約 45GB 的空間,此時 A6000 (48GB) 能放下但 40GB 的 A100 還是放不下。相應的推理代碼如下:

需要注意的是,INT8 混合精度推理使用的浮點精度是?torch.float16?而不是?torch.bfloat16,因此請務必詳盡地對結(jié)果進行測試。

如果你有多張 GPU 卡并安裝了?accelerate,你還可以用?device_map="auto"?將模型的各層自動分布到多張卡上運行。如有必要,甚至可以將某些層卸載到 CPU,但這會影響推理速度。

在最新版本的?bitsandbytestransformers?以及?accelerate?中我們還支持了 4 比特加載。此時,40B 模型僅需約 27GB 的顯存就能運行。雖然這個需求還是比 3090 或 4090 這些卡所能提供的顯存大,但已經(jīng)足以在顯存為 30GB 或 40GB 的卡上運行了。

Text Generation Inference

Text Generation Inference 是 Hugging Face 開發(fā)的一個可用于生產(chǎn)的推理容器。有了它,用戶可以輕松部署大語言模型。

其主要特點有:

  • 對輸入進行流式 batch 組裝 (batching)

  • 流式生成詞,主要基于 SSE 協(xié)議 (Server-Sent Events,SSE)

  • 推理時支持多 GPU 張量并行 (Tensor Parallelism ),推理速度更快

  • transformers 模型代碼由定制 CUDA 核函數(shù)深度優(yōu)化

  • 基于 Prometheus 和 Open Telemetry 的產(chǎn)品級日志記錄、監(jiān)控和跟蹤機制

從 v0.8.2 起,Text Generation Inference 原生支持 Falcon 7b 和 40b 模型,而無需依賴 transformers 的?“信任遠程代碼 (trust remote code)”?功能。因此,Text Generation Inference 可以支持密閉部署及安全審計。此外,我們在 Falcon 模型的實現(xiàn)中加入了定制 CUDA 核函數(shù)優(yōu)化,這可顯著降低推理的端到端延遲。

Hugging Face Inference Endpoint 現(xiàn)已支持 Text Generation Inference。你可以在單張 A100 上輕松部署?falcon-40b-instruct?的 Int8 量化模型。

Text Generation Inference 現(xiàn)已集成至 Hugging Face 的 Inference Endpoint。想要部署 Falcon 模型,可至 模型頁面 并點擊 Deploy -> Inference Endpoints 按鈕。

如需部署 7B 模型,建議選擇 “GPU [medium] - 1x Nvidia A10G”。

如需部署 40B 模型,你需要在 “GPU [xlarge] - 1x Nvidia A100” 上部署且需要開啟量化功能,路徑如下:
Advanced configuration -> Serving Container -> Int-8 Quantization

注意: 在此過程中,如果你需要升級配額,可直接發(fā)電子郵件至 api-enterprise@huggingface.co 申請。

評估

那么 Falcon 模型究竟效果如何?Falcon 的作者們馬上將會發(fā)布一個深入的評估數(shù)據(jù)。這里,我們僅在我們的 Open LLM 排行榜 上對 Falcon 基礎模型和指令模型進行一個初步評估。Open LLM 排行榜主要衡量 LLM 的推理能力及其回答以下幾個領域的問題的能力:

  • AI2 推理挑戰(zhàn) (ARC): 小學程度有關科學的選擇題。

  • HellaSwag: 圍繞日常事件的常識性問題。

  • MMLU: 57 個科目 (包含職業(yè)科目及學術(shù)科目) 的選擇題。

  • TruthfulQA: 測試模型從一組錯誤陳述中找出事實性陳述的能力。

結(jié)果顯示,40B 基礎模型和指令模型都非常強,目前在 Open LLM 排行榜 上分列第一和第二??!

正如 Thomas Wolf 所述,我們驚喜地發(fā)現(xiàn),目前預訓練 40B 模型所用的計算量大約只有 LLaMa 65B 所用計算量的一半 (Falcon 40B 用了 2800 petaflop- 天,而 LLaMa 65B 用了 6300 petaflop- 天),這表明該模型甚至尚未完全預訓練至 LLM 的“最佳”極限。

對 7B 模型而言,我們發(fā)現(xiàn)其基礎模型表現(xiàn)優(yōu)于?llama-7b,并超過了 MosaicML 的?mpt-7b,成為當前該規(guī)模上最好的預訓練 LLM。下面摘錄了排行榜中一些熱門模型的排名情況,以供比較:

盡管?Open LLM 排行榜?不能衡量聊天能力 (這方面目前主要還是依賴人類評估),但截至目前 Falcon 模型表現(xiàn)出的這些初步效果依然非常鼓舞人心!

現(xiàn)在讓我們來看看如何微調(diào)一個你自己的 Falcon 模型 —— 或許你微調(diào)出來的某一個模型最終會登上榜首??。

用 PEFT 微調(diào)

訓練 10B+ 大小的模型在技術(shù)和計算上都頗具挑戰(zhàn)。在本節(jié)中,我們將了解如何使用 Hugging Face 生態(tài)中軟件工具在簡單的硬件上高效地微調(diào)超大模型,并展示如何在單張英偉達 T4 卡 (16GB - Google Colab) 上微調(diào)?falcon-7b。

我們以在 Guanaco 數(shù)據(jù)集 上微調(diào) Falcon 為例。Guanaco 數(shù)據(jù)集是 Open Assistant 數(shù)據(jù)集 的一個高質(zhì)量子集,其中包含大約 1 萬個對話。通過 PEFT 庫,我們可以使用最新的 QLoRA 方法用 4 比特來表示模型,并凍結(jié)它,再在其上加一個適配子模型 (adapter),并微調(diào)該適配子模型。你可以 從這篇博文中 了解有關 4 比特量化模型的更多信息。

因為在使用低階適配器 (Low Rank Adapters,LoRA) 時只有一小部分模型權(quán)重是可訓練的,所以可訓練參數(shù)的數(shù)量和訓得模型的尺寸都會顯著減小。如下圖所示,最終的訓練產(chǎn)物 (trained artifact) 與原始的 7B 模型 (數(shù)據(jù)類型為 bfloat16 時占 15GB 存儲空間) 相比,只占 65MB 存儲空間。

與大約 15GB 的原始模型(半精度)相比,最終的訓練產(chǎn)物只需存儲 65MB 的權(quán)重

更具體地說,在選定需要微調(diào)的模塊 (即注意力模塊的查詢映射層和鍵映射層) 之后,我們在每個目標模塊旁邊添加兩個小的可訓練線性層 (如下圖所示) 作為適配子模型。然后,將適配子模型輸出的隱含狀態(tài)與原始模型的隱含狀態(tài)相加以獲得最終隱含狀態(tài)。

用由權(quán)重矩陣 A 和 B 組成的低秩適配器(右)的輸出激活來增強原始(凍結(jié))預訓練模型(左)的輸出激活。

一旦訓練完成,無須保存整個模型,因為基礎模型一直處于凍結(jié)狀態(tài)。此外,原始模型可以表示為任意數(shù)據(jù)類型 (int8、fp4、fp16 等),只要在與適配器的輸出隱含狀態(tài)相加前,將其輸出隱含狀態(tài)的數(shù)據(jù)類型轉(zhuǎn)換成與適配器相同的數(shù)據(jù)類型即可 —— bitsandbytes 的模塊 (?Linear8bitLt?和 ?Linear4bit?) 就是這么做的,?Linear8bitLt?和 ?Linear4bit?這兩個模塊的輸出數(shù)據(jù)類型與原未量化模型的輸出數(shù)據(jù)類型相同。

我們在 Guanaco 數(shù)據(jù)集上微調(diào)了 Falcon 模型的兩個變體 (7B 和 40B)。其中,7B 模型是在單 NVIDIA-T4 16GB 上微調(diào)的,而 40B 模型是在單 NVIDIA A100 80GB 上微調(diào)的。在微調(diào)時,我們使用了 4 比特量化的基礎模型以及 QLoRA 方法,并使用了 來自 TRL 庫的最新的?SFTTrainer。

此處 提供了使用 PEFT 重現(xiàn)我們實驗的完整腳本。但是如果你想快速運行?SFTTrainer?(而無需 PEFT) 的話,只需下面幾行代碼即可:

你還可以查看 原始 QLoRA 代碼庫,以了解有關如何評估訓練模型的更多詳細信息。

關于微調(diào)的資源

  • 使用 4 比特量化和 PEFT 在 Guanaco 數(shù)據(jù)集上微調(diào) Falcon-7B 的 Colab notebook

  • 訓練代碼

  • 40B 模型的 LoRA 模型?(日志)

  • 7B 模型的 LoRA 模型?(日志)

總結(jié)

Falcon 是最新的、令人興奮的、可商用的大語言模型。在本文中,我們展示了 Falcon 模型的功能、如何在你自己的環(huán)境中運行 Falcon 模型以及在 Hugging Face 生態(tài)中如何輕松地用自有數(shù)據(jù)微調(diào)它們。我們期待看到社區(qū)如何使用 Falcon 模型!

英文原文:?https://hf.co/blog/falcon

原文作者:Leandro von Werra,Younes Belkada,Sourab Mangrulkar,Lewis Tunstall,Olivier Dehaene,Pedro Cuenca,Philipp Schmid

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

排版/審校: zhongdongy (阿東)


Falcon 登陸 Hugging Face 生態(tài)的評論 (共 條)

分享到微博請遵守國家法律
靖宇县| 土默特左旗| 车险| 鄂州市| 九江市| 孟州市| 平邑县| 辰溪县| 宜良县| 凤庆县| 修水县| 尚志市| 鲁山县| 留坝县| 松溪县| 玉屏| 新宁县| 当雄县| 涿州市| 万源市| 安阳县| 樟树市| 灵璧县| 个旧市| 乐山市| 徐闻县| 天水市| 鹰潭市| 衡阳市| 桐庐县| 隆林| 焉耆| 丰城市| 岑溪市| 兴隆县| 曲松县| 洛扎县| 广宁县| 贡山| 仁布县| 商城县|