目錄
運行機制
首頁 科技週邊 人工智慧 跑ChatGPT體量模型,從此只需一塊GPU:加速百倍的方法來了

跑ChatGPT體量模型,從此只需一塊GPU:加速百倍的方法來了

Apr 11, 2023 pm 07:58 PM
ai 模型

計算成本是人們打造 ChatGPT 等大模型面臨的重大挑戰之一。

根據統計,從GPT 演化到GPT-3 的過程也是模型量體成長的過程- 參數量從1.17 億增加到1750 億,預訓練資料量從5GB 增加到45TB,其中GPT-3 訓練一次的費用是460 萬美元,總訓練成本達1200 萬美元。

除了訓練,推理也很花錢。有人估算,現在 OpenAI 運行 ChatGPT 的算力費用每天就有 10 萬美元。

在發展技術,讓大模型掌握更多能力的同時,也有人在嘗試降低 AI 所需的算力資源。最近,一種名為 FlexGen 的技術因為「一塊 RTX 3090 跑 ChatGPT 體積模型」而獲得了人們的關注。

雖然FlexGen 加速後的大模型看起來仍然很慢—— 跑1750 億參數的語言模型時每秒1 個token,但令人印象深刻的是,它已經把不可能變成了可能。

傳統上,大語言模型(LLM)推理的高運算和記憶體需求使人們必須使用多個高階 AI 加速器進行訓練。本研究探討如何將 LLM 推理的要求降低到一個消費級 GPU 並實現實用效能。

近日,來自史丹佛大學、UC Berkeley、蘇黎世聯邦理工學院、Yandex、莫斯科國立高等經濟學院、Meta、卡內基美隆大學等機構的新研究提出了FlexGen,這是一種用於運行有限GPU 記憶體的LLM 的高吞吐量生成引擎。

透過聚合來自 GPU、CPU 和磁碟的記憶體和運算,FlexGen 可以在各種硬體資源限制下靈活配置。透過線性規劃優化器,它搜尋儲存和存取張量的最佳模式,包括重量、啟動和注意力鍵 / 值(KV)快取。 FlexGen 將權重和 KV 快取進一步壓縮到 4 位,精度損失低到可以忽略不計。與最先進的 offloading 系統相比,FlexGen 在單一 16GB GPU 上運行 OPT-175B 的速度提高了 100 倍,並首次實現了 1 token/s 的實際生成吞吐量。如果提供了更多的分散式 GPU,FlexGen 還附帶管線並行 runtime,以允許在解碼時進行超線性擴展。

目前,該技術已經放出程式碼,獲得了數千Star 量:#https://www.php.cn ( ##近年來,大語言模型在廣泛的任務中表現出卓越的表現。 LLM 在展現前所未有的通用智能的同時,也讓人們在建構時面臨前所未有的挑戰。這些模型可能有數十億甚至數萬億個參數,這導致運行它們需要極高的計算和記憶體要求。例如,GPT-175B(GPT-3)僅用於儲存模型權重就需要 325GB 的記憶體。要讓此模型進行推理,至少需要五塊英偉達 A100(80GB)和複雜的平行策略。

降低 LLM 推理資源需求的方法是最近人們經常討論的內容。這些努力分為三個方向:

跑ChatGPT體量模型,從此只需一塊GPU:加速百倍的方法來了(1)模型壓縮以減少總記憶體佔用量;

##(2)協同推理,通過去中心化分攤成本;

(3)Offloading 以利用CPU 和磁碟的記憶體。

這些技術顯著降低了使用 LLM 的運算資源需求。然而,人們通常假設模型適合 GPU 內存,而現有的基於 offloading 的系統仍然難以使用單塊 GPU 以可接受的吞吐量運行 1750 億參數規模的模型。

在新研究中,作者專注於高吞吐量產生推理的有效 offloading 策略。當 GPU 顯存不夠用時,我們需要將其卸載到二級存儲,透過部分載入的方式,逐段進行運算。在典型的機器上,記憶體層次結構分為三級,如下圖所示。高階記憶體速度快但稀缺,低階記憶體速度慢但充裕。

在 FlexGen 中,作者不追求低延遲,而是瞄準面向吞吐量的場景,這些場景在基準測試、資訊擷取、資料整理等應用中很受歡迎。實現低延遲對於 offloading 來說本質上是一個挑戰,但是對於吞吐量導向的場景,可以大大提高 offloading 的效率。圖 1 說明了三個具有 offloading 的推理系統的延遲吞吐量權衡。透過仔細的調度,I/O 成本可以透過大量輸入分攤並與計算重疊。在研究中,作者展示了就單位算力成本而言,單塊消費級 GPU 吞吐量優化的 T4 GPU 效率要比雲端上延遲優化的 8 塊 A100 GPU 的效率高 4 倍。

跑ChatGPT體量模型,從此只需一塊GPU:加速百倍的方法來了

#圖1. OPT-175B(左)和OPT-30B(右)上三個基於offloading 的系統的延遲和吞吐量權衡。 FlexGen 實現了新的帕累托最優邊界,OPT-175B 的最大吞吐量提高了 100 倍。由於記憶體不足,其他系統無法進一步提高吞吐量。

儘管已有研究在訓練的背景下討論了offloading 的延遲- 吞吐量權衡,但尚未有人將其用於生成LLM 推理,這是一個截然不同的過程。由於 LLM 的自回歸性質,生成推理提出了獨特的挑戰。除了儲存所有參數外,它還需要順序解碼並維護一個大的注意力鍵 / 值快取(KV 快取)。現有的 offload 系統都無法應對這些挑戰,因此它們執行過多的 I/O,只能實現遠低於硬體能力的吞吐量。

為產生推理設計良好的 offloading 策略具有一定挑戰性。首先,這個過程中存在三種張量:權重、啟動和 KV 快取。此策略應指定在三級層次結構上的卸載內容、位置以及卸載時機。其次,逐個 batch、逐個 token 和逐個 layer 計算的結構形成了一個複雜的依賴圖,可以透過多種方式進行計算。此策略應該選擇一個可以最小化執行時間的時間表。這些選擇共同構成了一個複雜的設計空間。

為此,在新方法 FlexGen 上,人們提出了一個用於 LLM 推理的 offloading 框架。 FlexGen 聚合來自 GPU、CPU 和磁碟的內存,並能有效地調度 I/O 操作,作者也討論了可能的壓縮方法和分佈式管道並行性。

該研究的主要貢獻如下:

1、作者正式定義了可能的offloading 策略的搜尋空間,並使用成本模型和線性規劃求解器搜尋最佳策略。值得關注的是,研究人員證明了搜尋空間捕捉了一個幾乎 I/O 最優的計算順序,其 I/O 複雜度在最優計算順序的 2 倍以內。搜尋演算法可以針對各種硬體規格和延遲 / 吞吐量限制進行配置,從而提供一種平滑導航權衡空間的方法。與現有策略相比,FlexGen 解決方案統一了權重、啟動和 KV 快取的放置,從而實現了更大的 batch size。

2、研究表明,可以將 OPT-175B 等 LLM 的權重和 KV 快取壓縮到 4 位,而無需重新訓練 / 校準,精度損失可忽略不計。這是透過細粒度分組來量化實現的,可以顯著降低 I/O 成本。

3、透過在英偉達 T4 GPU (16GB) 上執行 OPT-175B 來展示 FlexGen 的效率。在單塊GPU 上,給定相同的延遲要求,與DeepSpeed Zero-Inference (Aminabadi et al., 2022) 和Hugging Face Accelerate (HuggingFace, 2022) 相比,不壓縮的FlexGen 可以實現高出65 倍的吞吐量,後者是目前業界最先進的基於offloading 的推理系統。如果允許更高的延遲和壓縮,FlexGen 可以進一步提高吞吐量並達到 100 倍的改進。 FlexGen 是第一個可以使用單塊 T4 GPU 為 OPT-175B 實現 1 token/s 速度吞吐量的系統。如果給定多塊分散式 GPU,具有管線並行性的 FlexGen 可在解碼時實現超線性擴展。

在研究中,作者也將 FlexGen 和 Petals 作為 offloading 和去中心化集合推理方法的代表進行了比較。結果表明,具有單塊 T4 GPU 的 FlexGen 在吞吐量方面勝過具有 12 塊 T4 GPU 的分散式 Petal 集群,並且在某些情況下甚至可以實現更低的延遲。

運行機制

透過聚合來自 GPU、CPU 和磁碟的記憶體和運算,FlexGen 可以在各種硬體資源限制下靈活配置。透過線性規劃優化器,它搜尋儲存和存取張量的最佳模式,包括重量、啟動和注意力鍵 / 值 (KV) 快取。 FlexGen 將權重和 KV 快取進一步壓縮到 4 位,精度損失可以忽略不計。

FlexGen 的關鍵想法是進行延遲 - 吞吐量權衡。實現低延遲對於卸載方法來說本來就具有挑戰性,但對於面向吞吐量的場景,可以大幅提升卸載效率(見下圖)。 FlexGen 利用區塊調度來重複使用權重並將 I/O 與計算重疊,如下圖 (b) 所示,而其他基準系統使用低效的逐行調度,如下圖 (a) 所示。

跑ChatGPT體量模型,從此只需一塊GPU:加速百倍的方法來了

目前,研究作者的下一步計畫包括對蘋果M1、M2 晶片的支援和Colab 部署的支持。

FlexGen 自發布後在 GitHub 上的 Star 量很快上千,在社群網路上熱度也很高。人們紛紛表示這個專案很有前途,似乎運行高性能大型語言模型的障礙正在逐漸克服,希望在今年之內,單機就能搞定 ChatGPT。

有人用這個方法訓練了一個語言模型,結果如下:

跑ChatGPT體量模型,從此只需一塊GPU:加速百倍的方法來了

#################################### ###雖然沒有經過大量數據的投餵,AI 不知道具體知識,但回答問題的邏輯似乎比較清晰,或許未來的遊戲中,我們能看見這樣的NPC? ######

以上是跑ChatGPT體量模型,從此只需一塊GPU:加速百倍的方法來了的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1268
29
C# 教程
1248
24
如何理解C  中的DMA操作? 如何理解C 中的DMA操作? Apr 28, 2025 pm 10:09 PM

DMA在C 中是指DirectMemoryAccess,直接內存訪問技術,允許硬件設備直接與內存進行數據傳輸,不需要CPU干預。 1)DMA操作高度依賴於硬件設備和驅動程序,實現方式因係統而異。 2)直接訪問內存可能帶來安全風險,需確保代碼的正確性和安全性。 3)DMA可提高性能,但使用不當可能導致系統性能下降。通過實踐和學習,可以掌握DMA的使用技巧,在高速數據傳輸和實時信號處理等場景中發揮其最大效能。

C  中的chrono庫如何使用? C 中的chrono庫如何使用? Apr 28, 2025 pm 10:18 PM

使用C 中的chrono庫可以讓你更加精確地控制時間和時間間隔,讓我們來探討一下這個庫的魅力所在吧。 C 的chrono庫是標準庫的一部分,它提供了一種現代化的方式來處理時間和時間間隔。對於那些曾經飽受time.h和ctime折磨的程序員來說,chrono無疑是一個福音。它不僅提高了代碼的可讀性和可維護性,還提供了更高的精度和靈活性。讓我們從基礎開始,chrono庫主要包括以下幾個關鍵組件:std::chrono::system_clock:表示系統時鐘,用於獲取當前時間。 std::chron

量化交易所排行榜2025 數字貨幣量化交易APP前十名推薦 量化交易所排行榜2025 數字貨幣量化交易APP前十名推薦 Apr 30, 2025 pm 07:24 PM

交易所內置量化工具包括:1. Binance(幣安):提供Binance Futures量化模塊,低手續費,支持AI輔助交易。 2. OKX(歐易):支持多賬戶管理和智能訂單路由,提供機構級風控。獨立量化策略平台有:3. 3Commas:拖拽式策略生成器,適用於多平台對沖套利。 4. Quadency:專業級算法策略庫,支持自定義風險閾值。 5. Pionex:內置16 預設策略,低交易手續費。垂直領域工具包括:6. Cryptohopper:雲端量化平台,支持150 技術指標。 7. Bitsgap:

怎樣在C  中處理高DPI顯示? 怎樣在C 中處理高DPI顯示? Apr 28, 2025 pm 09:57 PM

在C 中處理高DPI顯示可以通過以下步驟實現:1)理解DPI和縮放,使用操作系統API獲取DPI信息並調整圖形輸出;2)處理跨平台兼容性,使用如SDL或Qt的跨平台圖形庫;3)進行性能優化,通過緩存、硬件加速和動態調整細節級別來提升性能;4)解決常見問題,如模糊文本和界面元素過小,通過正確應用DPI縮放來解決。

C  中的實時操作系統編程是什麼? C 中的實時操作系統編程是什麼? Apr 28, 2025 pm 10:15 PM

C 在實時操作系統(RTOS)編程中表現出色,提供了高效的執行效率和精確的時間管理。 1)C 通過直接操作硬件資源和高效的內存管理滿足RTOS的需求。 2)利用面向對象特性,C 可以設計靈活的任務調度系統。 3)C 支持高效的中斷處理,但需避免動態內存分配和異常處理以保證實時性。 4)模板編程和內聯函數有助於性能優化。 5)實際應用中,C 可用於實現高效的日誌系統。

怎樣在C  中測量線程性能? 怎樣在C 中測量線程性能? Apr 28, 2025 pm 10:21 PM

在C 中測量線程性能可以使用標準庫中的計時工具、性能分析工具和自定義計時器。 1.使用庫測量執行時間。 2.使用gprof進行性能分析,步驟包括編譯時添加-pg選項、運行程序生成gmon.out文件、生成性能報告。 3.使用Valgrind的Callgrind模塊進行更詳細的分析,步驟包括運行程序生成callgrind.out文件、使用kcachegrind查看結果。 4.自定義計時器可靈活測量特定代碼段的執行時間。這些方法幫助全面了解線程性能,並優化代碼。

給MySQL表添加和刪除字段的操作步驟 給MySQL表添加和刪除字段的操作步驟 Apr 29, 2025 pm 04:15 PM

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,刪除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段時,需指定位置以優化查詢性能和數據結構;刪除字段前需確認操作不可逆;使用在線DDL、備份數據、測試環境和低負載時間段修改表結構是性能優化和最佳實踐。

C  中的字符串流如何使用? C 中的字符串流如何使用? Apr 28, 2025 pm 09:12 PM

C 中使用字符串流的主要步驟和注意事項如下:1.創建輸出字符串流並轉換數據,如將整數轉換為字符串。 2.應用於復雜數據結構的序列化,如將vector轉換為字符串。 3.注意性能問題,避免在處理大量數據時頻繁使用字符串流,可考慮使用std::string的append方法。 4.注意內存管理,避免頻繁創建和銷毀字符串流對象,可以重用或使用std::stringstream。

See all articles