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

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

使用 AutoGPTQ 和 transformers 讓大語言模型更輕量化

2023-08-25 23:07 作者:HuggingFace  | 我要投稿

大語言模型在理解和生成人類水平的文字方面所展現(xiàn)出的非凡能力,正在許多領(lǐng)域帶來應(yīng)用上的革新。然而,在消費級硬件上訓(xùn)練和部署大語言模型的需求也變得越來越難以滿足。

?? Hugging Face 的核心使命是?讓優(yōu)秀的機器學(xué)習(xí)普惠化?,而這正包括了盡可能地讓所有人都能夠使用上大模型。本著 與 bitsandbytes 合作 一樣的精神,我們將 AutoGPTQ 代碼庫集成到了 Transformers 中,讓用戶使用 GPTQ 算法 (Frantar et al. 2023) 在 8 位、4 位、3 位,甚至是 2 位精度下量化和運行模型成為可能。當(dāng)使用 int4 量化時,精度的下降可以忽略不計,同時在小批量推理上保持著與?fp16?基線相當(dāng)?shù)乃俣取P枰⒁獾氖?,GPTQ 方法與 bitsandbytes 提出的訓(xùn)練后量化方法有所不同: 它需要在量化階段提供一個校準(zhǔn)數(shù)據(jù)集。

本次集成支持英偉達 GPU 和基于 RoCm 的 AMD GPU。

目錄

  • 相關(guān)資源

  • GPTQ 論文總結(jié)

  • AutoGPTQ 代碼庫——一站式地將 GPTQ 方法應(yīng)用于大語言模型

  • ?? Transformers 對 GPTQ 模型的本地化支持

  • 使用 Optimum 代碼庫 量化模型

  • 通過?Text-Generation-Inference?使用 GPTQ 模型

  • 使用 PEFT 微調(diào)量化后的模型

  • 改進空間

    • 已支持的模型

  • 結(jié)論和結(jié)語

  • 致謝

相關(guān)資源

本文及相關(guān)版本發(fā)布提供了一些資源來幫助用戶開啟 GPTQ 量化的旅程:

  • 原始論文

  • 運行于 Google Colab 筆記本上的基礎(chǔ)用例 —— 該筆記本上的用例展示了如何使用 GPTQ 方法量化你的 transformers 模型、如何進行量化模型的推理,以及如何使用量化后的模型進行微調(diào)。

  • Transformers 中集成 GPTQ 的 說明文檔

  • Optimum 中集成 GPTQ 的 說明文檔

  • TheBloke 模型倉庫 中的 GPTQ 模型。

GPTQ 論文總結(jié)

通常,量化方法可以分為以下兩類:

  1. 訓(xùn)練后量化 (Post Training Quantization, PTQ): 適度地使用一些資源來量化預(yù)訓(xùn)練好的模型,如一個校準(zhǔn)數(shù)據(jù)集和幾小時的算力。

  2. 量化感知訓(xùn)練 (Quantization Aware Training, QAT): 在訓(xùn)練或進一步微調(diào)之前執(zhí)行量化。

GPTQ 屬于訓(xùn)練后量化,這對于大模型而言格外有趣且有意義,因為對其進行全參數(shù)訓(xùn)練以及甚至僅僅是微調(diào)都十分昂貴。

具體而言,GPTQ 采用 int4/fp16 (W4A16) 的混合量化方案,其中模型權(quán)重被量化為 int4 數(shù)值類型,而激活值則保留在 float16。在推理階段,模型權(quán)重被動態(tài)地反量化回 float16 并在該數(shù)值類型下進行實際的運算。

該方案有以下兩方面的優(yōu)點:

  • int4 量化能夠節(jié)省接近4倍的內(nèi)存,這是因為反量化操作發(fā)生在算子的計算單元附近,而不是在 GPU 的全局內(nèi)存中。

  • 由于用于權(quán)重的位寬較低,因此可以節(jié)省數(shù)據(jù)通信的時間,從而潛在地提升了推理速度。

GPTQ 論文解決了分層壓縮的問題:

給定一個擁有權(quán)重矩陣?%7BW%7D_%7Bl%7D?和輸入??的網(wǎng)絡(luò)層?,我們期望獲得一個量化版本的權(quán)重矩陣?%7B%5Chat%7BW%7D_%7Bl%7D%7D?以最小化均方誤差 (MSE):

%7B%5Chat%7BW%7D_%7Bl%7D%7D%5E%7B*%7D%20%3D%20argmin_%7B%5Chat%7BW_%7Bl%7D%7D%7D%20%5C%7CW_%7Bl%7DX-%5Chat%7BW%7D_%7Bl%7DX%5C%7C%5E%7B2%7D_%7B2%7D

一旦每層都實現(xiàn)了上述目標(biāo),就可以通過組合各網(wǎng)絡(luò)層量化結(jié)果的方式來獲得一個完整的量化模型。

為解決這一分層壓縮問題,論文作者采用了最優(yōu)腦量化 (Optimal Brain Quantization, OBQ) 框架 (Frantar et al 2022) 。OBQ 方法的出發(fā)點在于其觀察到: 以上等式可以改寫成權(quán)重矩陣??每一行的平方誤差之和

%5Csum_%7Bi%3D0%7D%5E%7Bd_%7Brow%7D%7D%20%5C%7CW_%7Bl%5Bi%2C%3A%5D%7DX-%5Chat%7BW%7D_%7Bl%5Bi%2C%3A%5D%7DX%5C%7C%5E%7B2%7D_%7B2%7D

這意味著我們可以獨立地對每一行執(zhí)行量化。即所謂的 per-channel quantization。對每一行?,OBQ 在每一時刻只量化一個權(quán)重,同時更新所有未被量化的權(quán)重,以補償量化單個權(quán)重所帶來的誤差。所選權(quán)重的更新采用一個閉環(huán)公式,并利用了海森矩陣 (Hessian Matrices)。

GPTQ 論文通過引入一系列優(yōu)化措施來改進上述量化框架,在降低量化算法復(fù)雜度的同時保留了模型的精度。

相較于 OBQ,GPTQ 的量化步驟本身也更快: OBQ 需要花費 2 個 GPU 時來完成 BERT 模型 (336M) 的量化,而使用 GPTQ,量化一個 Bloom 模型 (176B) 則只需不到 4 個 GPU 時。

為了解算法的更多細(xì)節(jié)以及在困惑度 (perplexity, PPL) 指標(biāo)和推理速度上的不同測評數(shù)據(jù),可查閱原始 論文 。

AutoGPTQ 代碼庫——一站式地將 GPTQ 方法應(yīng)用于大語言模型

AutoGPTQ 代碼庫讓用戶能夠使用 GPTQ 方法量化 ?? Transformers 中支持的大量模型,而社區(qū)中的其他平行工作如 GPTQ-for-LLaMa 、Exllama 和 llama.cpp 則主要針對 Llama 模型架構(gòu)實現(xiàn)量化策略。相較之下,AutoGPTQ 因其對豐富的 transformers 架構(gòu)的平滑覆蓋而廣受歡迎。

正因為 AutoGPTQ 代碼庫覆蓋了大量的 transformers 模型,我們決定提供一個 ?? Transformers 的 API 集成,讓每個人都能夠更容易地使用大語言模型量化技術(shù)。截止目前,我們已經(jīng)集成了包括 CUDA 算子在內(nèi)的最常用的優(yōu)化選項。對于更多高級選項如使用 Triton 算子和 (或) 兼容注意力的算子融合,請查看 AutoGPTQ 代碼庫。

?? Transformers 對 GPTQ 模型的本地化支持

在 安裝 AutoGPTQ 代碼庫 和?optimum?(pip install optimum) 之后,在 Transformers 中運行 GPTQ 模型將非常簡單:

請查閱 Transformers 的 說明文檔 以了解有關(guān)所有特性的更多信息。

我們的 AutoGPTQ 集成有以下諸多優(yōu)點:

  • 量化模型可被序列化并在 Hugging Face Hub 上分享。

  • GPTQ 方法大大降低運行大語言模型所需的內(nèi)存,同時保持著與 FP16 相當(dāng)?shù)耐评硭俣取?/p>

  • AutoGPTQ 在更廣泛的 transformers 架構(gòu)上支持 Exllama 算子。

  • 該集成帶有基于 RoCm 的 AMD GPU 的本地化支持。

  • 能夠?使用 PEFT 微調(diào)量化后的模型?。

你可以在 Hugging Face Hub 上查看你所喜愛的模型是否已經(jīng)擁有 GPTQ 量化版本。TheBloke,Hugging Face 的頂級貢獻者之一,已經(jīng)使用 AutoGPTQ 量化了大量的模型并分享在 Hugging Face Hub 上。在我們的共同努力下,這些模型倉庫都將可以與我們的集成一起開箱即用。

以下是一個使用 batch size = 1 的測評結(jié)果示例。該測評結(jié)果通過在英偉達 A100-SXM4-80GB GPU 上運行得到。我們使用長度為 512 個詞元的提示文本,并精確地生成 512 個新詞元。表格的第一行展示的是未量化的?fp16?基線,另外兩行則展示使用 AutoGPTQ 不同算子的內(nèi)存開銷和推理性能。

一個更全面的、可復(fù)現(xiàn)的測評結(jié)果可以在這里 取得。

使用?Optimum 代碼庫?量化模型

為了將 AutoGPTQ 無縫集成到 Transformers 中,我們使用了 AutoGPTQ API 的一個極簡版本,其可在 Optimum 中獲得 —— 這是 Hugging Face 針對訓(xùn)練和推理優(yōu)化而開發(fā)的一個工具包。通過這種方式,我們輕松地實現(xiàn)了與 Transformers 的集成,同時,如果人們想要量化他們自己的模型,他們也完全可以單獨使用 Optimum 的 API!如果想要量化你自己的大語言模型,請查閱 Optimum 的 說明文檔 。

只需數(shù)行代碼,即可使用 GPTQ 方法量化 ?? Transformers 的模型:

量化一個模型可能花費較長的時間。對于一個 175B 參數(shù)量的模型,如果使用一個大型校準(zhǔn)數(shù)據(jù)集 (如 “c4”),至少需要 4 個 GPU 時。正如上面提到的那樣,許多 GPTQ 模型已經(jīng)可以在 Hugging Face Hub 上被取得,這讓你在大多數(shù)情況下無需自行量化模型。當(dāng)然,你仍可以使用你所專注的特定領(lǐng)域的數(shù)據(jù)集來量化模型。

通過 Text-Generation-Inference 使用 GPTQ 模型

在將 GPTQ 集成到 Transformers 中的同時,Text-Generation-Inference 代碼庫 (TGI) 已經(jīng)添加了 GPTQ 的支持,旨在為生產(chǎn)中的大語言模型提供服務(wù)。現(xiàn)在,GPTQ 已經(jīng)可以與動態(tài)批處理、paged attention、flash attention 等特性一起被應(yīng)用于 廣泛的 transformers 模型架構(gòu) 。

例如,這一集成允許在單個 A100-80GB GPU上服務(wù) 70B 模型!而這在使用 fp16 的模型權(quán)重時是不可能的,因為它超出了最大可用的 GPU 內(nèi)存。

你可以在 TGI 的 說明文檔 中找到更多有關(guān) GPTQ 的用法。

需要注意的時,TGI 中集成的算子不能很好地擴展到較大的批處理大小。因此,這一方式雖然節(jié)省了內(nèi)存,但在較大的批處理大小上發(fā)生速度的下降是符合預(yù)期的。

使用 PEFT 微調(diào)量化后的模型

在常規(guī)的方法下,你無法進一步微調(diào)量化后的模型。然而,通過使用 PEFT 代碼庫,你可以在量化后的模型之上訓(xùn)練適應(yīng)性網(wǎng)絡(luò)!為實現(xiàn)這一目標(biāo),我們凍結(jié)了量化過的基座模型的所有網(wǎng)絡(luò)層,并額外添加可訓(xùn)練的適應(yīng)性網(wǎng)絡(luò)。這里是一些關(guān)于如何使用 PEFT 訓(xùn)練 GPTQ 模型的例子: Colab 筆記本 和 微調(diào)腳本 。

改進空間

雖然我們的 AutoGPTQ 集成在極小的預(yù)測質(zhì)量損失代價下,帶來了引人矚目的優(yōu)勢。但在量化技術(shù)應(yīng)用和算子實現(xiàn)方面仍有提升的空間。

首先,盡管 AutoGPTQ (在我們的認(rèn)知范圍內(nèi)) 已經(jīng)集成了 exllama 中所實現(xiàn)的最佳性能的 W4A16 算子 (權(quán)重為 int4 數(shù)值類型,激活值為 fp16 數(shù)值類型),其仍有很大的改進空間。來自 Kim 等人 的實現(xiàn)和 MIT Han Lab 的方法似乎十分可靠。此外,根據(jù)我們的內(nèi)部測評,似乎暫未有開源的高性能的 Triton 版本的 W4A16 算子實現(xiàn),這也是一個值得探索的方向。

在量化層面,我們需要再次強調(diào) GPTQ 方法只對模型權(quán)重進行量化。而針對大語言模型的量化,存在其他的方法,提供了以較小的預(yù)測質(zhì)量損失為代價,同時量化權(quán)重和激活值的方案。如 LLM-QAT 采用 int4/int8 的混合精度方案,同時還對 KV Cache 施行量化。這一技術(shù)的強大優(yōu)點是能實際使用整數(shù)運算算法來進行計算,一個例子是 英偉達的張量核心支持 int8 計算 。然而,據(jù)我們所知,目前暫無開源的 W4A8 量化算子,但這可能是一個 值得探索的方向 。

在算子層面,為更大的批處理大小設(shè)計高性能的 W4A16 算子仍然是一大挑戰(zhàn)。

已支持的模型

在初始實現(xiàn)中,暫時只支持純編碼器或純解碼器架構(gòu)的大語言模型。這聽起來似乎有較大的局限性,但其實已經(jīng)涵蓋了當(dāng)前絕大多數(shù)最先進的大語言模型,如 Llama、OPT、GPT-Neo、GPT-NeoX 等。

大型的視覺、語音和多模態(tài)模型在現(xiàn)階段暫不被支持。

結(jié)論和結(jié)語

本文中,我們介紹了 Transformers 對 AutoGPTQ 代碼庫 的集成,使得社區(qū)中的任何人都可以更方便地利用 GPTQ 方法量化大語言模型,助力令人激動的大語言模型工具和應(yīng)用的構(gòu)建。

這一集成支持英偉達 GPU 和基于 RoCm 的 AMD GPU,這是向支持更廣泛 GPU 架構(gòu)的量化模型的普惠化邁出的一大步。

與 AutoGPTQ 團隊的合作非常富有成效,我們非常感謝他們的支持和他們在該代碼庫上的工作。

我們希望本次集成將使每個人都更容易地在他們的應(yīng)用程序中使用大語言模型,我們迫不及待地想要看到大家即將使用它所創(chuàng)造出的一切!

再次提醒不要錯過文章開頭分享的有用資源,以便更好地理解本次集成的特性以及如何快速開始使用 GPTQ 量化。

  • 原始論文

  • 運行于 Google Colab 筆記本上的基礎(chǔ)用例 —— 該筆記本上的用例展示了如何使用 GPTQ 方法量化你的 transformers 模型、如何進行量化模型的推理,以及如何使用量化后的模型進行微調(diào)。

  • Transformers 中集成 GPTQ 的 說明文檔

  • Optimum 中集成 GPTQ 的 說明文檔

  • TheBloke 模型倉庫 中的 GPTQ 模型。

致謝

感謝 潘其威 對杰出的 AutoGPTQ 代碼庫的支持和所作的工作,以及他對本次集成的幫助。感謝 TheBloke 使用 AutoGPTQ 量化大量的模型并分享在 Hugging Face Hub 上,以及他在本次集成中所提供的幫助。感謝 qwopqwop200 對 AutoGPTQ 代碼庫的持續(xù)貢獻,目前,他正致力于將該代碼庫的使用場景拓展至 CPU ,這一特性將在 AutoGPTQ 的下一版本中發(fā)布。

最后,我們還要感謝 Pedro Cuenca 對本文的撰寫所提供的幫助。

英文原文:?https://hf.co/blog/gptq-integration

原文作者: Marc Sun, Félix Marty, 潘其威, Junjae Lee, Younes Belkada, Tom Jobbins

譯者: 潘其威

審校/排版: zhongdongy (阿東)

使用 AutoGPTQ 和 transformers 讓大語言模型更輕量化的評論 (共 條)

分享到微博請遵守國家法律
洛隆县| 昌乐县| 沁阳市| 平乐县| 铜山县| 桐庐县| 达州市| 宾川县| 牟定县| 兰坪| 错那县| 边坝县| 安岳县| 镇坪县| 海城市| 玉屏| 昌江| 凭祥市| 湟中县| 莲花县| 塔河县| 高尔夫| 英吉沙县| 辽宁省| 汉中市| 普格县| 上杭县| 安化县| 花莲市| 鲁山县| 嵩明县| 日照市| 都江堰市| 夏邑县| 德化县| 谷城县| 邵东县| 罗江县| 温州市| 拜泉县| 扶绥县|