大模型-分布式論文一瞥

1分離式架構

1.1?DistServe

DistServe: Disaggregating Prefill and Decoding for Goodput-optimized Large Language Model Serving

DistServe: Disaggregating Prefill and Decoding for Goodput-optimized Large Language Model Serving 講的是一個將prefill和decoding分離的實現。

論文地址: https://arxiv.org/pdf/2401.09670

代碼實現: https://github.com/LLMServe/DistServe

DistServe通過分離預填充和解碼計算來提高大型語言模型(LLM)的性能。現有的LLM服務系統將這兩個階段放在一起,并批量處理所有用戶和請求的預填充和解碼計算。我們發現,這種策略不僅會導致強烈的預填充-解碼干擾,還會將兩個階段的資源分配和并行計劃耦合在一起。LLM應用程序通常強調每個階段的個體延遲:預填充階段的首個token時間(TTFT)和解碼階段每個請求的每個輸出token時間(TPOT)。在嚴格的延遲要求下,現有系統必須優先考慮一個延遲,或者過度配置計算資源以同時滿足兩者。DistServe將預填充和解碼計算分配給不同的GPU,從而消除了預填充-解碼干擾。根據應用程序的TTFT和TPOT要求,DistServe為每個階段定制了資源分配和并行策略的共同優化策略。DistServe還根據服務集群的帶寬將這兩個階段放置在一起,以最小化由分解引起的通信。結果,DistServe在每個GPU上在TTFT和TPOT約束下提高了LLM服務性能的最大速率。我們的評估結果顯示,在各種流行的LLM、應用程序和延遲要求上,與現有技術系統相比,DistServe可以提供7.4倍的請求量或12.6倍的更嚴格的SLO(Service Level Objective),并且仍然在90%以上的請求中滿足延遲約束。

一個有效的LLM服務系統應該平衡這些需求,并最大化每個GPU的吞吐量,即在滿足SLO達成目標(例如90%)的前提下可以提供的最大請求速率-更高的每個GPU吞吐量直接轉化為更低的每個查詢成本。由于預填充和解碼階段共享LLM權重和工作內存,現有的LLM服務系統通常將這兩個階段放在一起并通過批量處理預填充和解碼步驟來最大化整個系統的吞吐量-跨所有用戶和請求生成的token數每秒。然而,為了滿足延遲要求,我們發現這些系統必須過度配置計算資源。為了看到這一點,圖1說明了在使用現有系統[27]為13B LLM提供服務時,隨著請求率的增加,P90 TTFT和TPOT如何變化,其中工作負載模式和兩個延遲約束設置以模擬使用LLM為文章生成簡短摘要。在滿足90%的SLO達成率的情況下,單個A100 GPU的最大可實現吞吐量,受到TTFT和TPOT要求中較嚴格要求的限制,約為1.6個請求每秒(rps。當每個階段在不同的GPU上獨立進行時,性能有顯著差異,如橙色和綠色曲線所示,預填充階段的每個GPU吞吐量為5.6 rps,解碼階段為10 rps。理想情況下,通過為預填充分配2個GPU和解碼分配1個GPU,我們可以有效地提供模型的總體吞吐量為10 rps,或者每個GPU平均為3.3 rps,比現有系統高2.1倍吞吐量差距主要源于預填充和解碼的共同放置-兩個具有非常不同計算特征和延遲要求的階段。

?

也就是說在實現相同的TTFT的要求下,一個GPU單獨prefill的情況下可以實現每秒5.6 個請求,而prefilling和decode都在一個GPU的llm 系統,只能達到1.6個rps.

在實現相同的TPOT的要求下,一個GPU單獨decode的情況下可以實現每秒10 個請求,而prefilling和decode都在一個GPU的llm 系統,只能達到1.6個rps.

  1. 首先,放置在一起會導致強烈的預填充-解碼干擾。預填充步驟通常比解碼步驟花費更長的時間。當批量處理在一起時,批處理中的解碼步驟會被預填充步驟延遲,顯著延長其TPOT;同樣,解碼步驟的包含導致TTFT的顯著增加,如圖2所示。即使我們將它們分別安排,問題仍然存在,因為它們開始競爭資源。等待GPU執行的解碼任務由于正在進行的預填充任務而增加了排隊延遲,反之亦然。優先安排一個階段可能會導致無法滿足另一個階段的延遲。

2.? 預填充和解碼計算在延遲要求和對不同形式并行性的偏好上有所不同。然而,放置預填充和解碼,會耦合它們的資源分配,并阻止實現更適合滿足每個階段特定延遲要求的不同并行性策略。

通過將LLM推理的預填充和解碼階段分離,將它們分配給不同的GPU。我們的方法有兩個好處。

  1. 首先,將每個階段獨立地在不同的GPU上運行可以消除預填充-解碼干擾。

  2. 其次,它允許根據各自的延遲要求,通過量身定制的資源分配和模型并行性策略,獨立地擴展每個階段。雖然分解會導致在GPU之間通信中間狀態,但我們展示了在現代GPU集群中,適當管理時,通信開銷是微不足道的,并且分解顯著提高了每個GPU的吞吐量。

作者構建了DistServe,一個通過分離預填充和解碼階段來優化吞吐量的LLM服務系統。給定TTFT和TPOT要求:

  1. DistServe首先通過共同優化預填充和解碼階段的GPU分配和并行性策略,假設只提供單個模型副本,來獨立地擴展每個階段。這種優化確保最大化每個GPU的吞吐量,并根據各自的延遲要求可能為每個階段分配不同數量的GPU和并行性策略。

  2. DistServe通過復制將此分配擴展到多個實例,直到滿足用戶所需的流量率。

  3. DistServe還具有一種算法,根據其分配方案和集群的帶寬,將預填充和解碼計算放置在一起,以最小化階段之間通信的開銷。

  4. DistServe實現為LLM推理引擎的編排層。我們使用各種LLM對DistServe進行評估,根據三個重要的現實世界LLM應用程序調整工作負載:聊天機器人、編程助手和文檔摘要。與現有解決方案相比,DistServe在延遲約束下可以提供高達4.48倍的請求量。

  5. 使用術語"實例"來表示管理完整模型權重副本的資源單元。當應用模型并行性時,一個實例可以對應多個GPU。需要注意的是,當我們將兩個階段分離到不同的GPU上時,每個階段管理其自己的模型權重副本,從而產生prefilling實例和decode實例。prefilling實例在接收到請求后,僅執行該請求的prefilling計算以生成第一個輸出令牌。然后,它將中間結果(主要是KV緩存)發送到decode實例,decode實例負責后續的解碼步驟。由于decode計算通常具有較低的GPU利用率,我們可以為decode實例分配多個prefilling實例。這樣可以批處理更多的解碼作業,以實現更高的GPU利用率。分離預填充和解碼自然地解決了兩個階段之間的干擾,并使每個階段都能專注于其優化目標 - TTFT或TPOT

調度策略:

DistServe的運行時架構如上圖所示。DistServe采用簡單的FCFS調度策略運行。所有傳入的請求都到達一個集中式控制器,然后根據prefilling處理隊列的最短的原則,分派到相應的prefilling實例進行處理,然后再分派到最負載最輕的解碼實例進行解碼。盡管這種設置簡單,但是它經過了幾個關鍵的增強,以適應現實世界工作負載的特點。

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87152.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87152.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87152.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

02.SpringBoot常用Utils工具類詳解

文章目錄 1. BeanUtils詳解1.1 什么是BeanUtils?1.2 主要的BeanUtils實現1.2.1 Spring BeanUtils1.2.2 Apache Commons BeanUtils1.2.3 其他實現 1.3 Spring BeanUtils詳細使用1.3.1 基本用法1.3.2 指定忽略屬性1.3.3 批量拷貝(列表轉換) 1.4…

Golang快速開發框架——項目立項與系統配置讀取組件viper(一)

Golang快速開發框架——項目立項與系統配置讀取組件viper(一) 背景 知識分享之Golang篇是我在日常使用Golang時學習到的各種各樣的知識的記錄,將其整理出來以文章的形式分享給大家,來進行共同學習。歡迎大家進行持續關注。 知識分…

打造可觀測的 iOS CICD 流程:調試、追蹤與質量保障全記錄

隨著iOS項目復雜度增加,團隊越來越依賴自動化構建、自動化測試等CI/CD流程來保證產品質量。但CI/CD環境下,很多線下調試手段無法直接使用,比如: 無法手動連真機跑Instruments測試包只在分發后才能拿到崩潰模擬器上表現和真機不一…

C++11中 <cinttypes>的入門與精通

文章目錄 一、<cinttypes> 是什么1. 固定寬度的整數類型2. 整數操作函數3. 格式化輸入輸出宏 二、深入理解 <cinttypes>1. 固定寬度整數類型的使用2. 整數操作函數的使用3. 格式化輸入輸出宏的使用 三、實踐和技巧1. 使用固定寬度整數類型的最佳實踐2. 使用整數操作…

Pytorhc Lightning進階:一篇實例玩轉Pytorhc Lightning 讓訓練更高效

Pytorhc Lightning進階&#xff1a;一篇實例玩轉Pytorhc Lightning 讓訓練更高效 Pytorhc Lightning 主要包含以下幾大類&#xff0c;主要圍繞以下講解&#xff1a; 模型&#xff0c;PyTorch Lightning 的核心是繼承 pl.LightningModule數據&#xff0c;數據模塊繼承pl.Light…

大模型算法面試筆記——注意力Transformer流程/面試題篇

學習資料來源于字母站大學 1 Transformer架構 基于編碼器-解碼器的架構來處理序列對。跟使用注意力的seq2seq不同&#xff0c;Transformer是基于純注意力。 2 注意力 2.1 自注意力機制 使用注意力&#xff1a;需要根據整個序列進行預測&#xff0c;對于同一input&#xf…

Rust 定義與實例化結構體

文章目錄 Rust 定義與實例化結構體5.1 結構體的定義與意義5.2 結構體實例化5.2.1 基本實例化5.2.2 可變性規則5.2.3 字段初始化簡寫5.2.4 結構體更新語法 5.3 特殊結構體類型5.3.1 元組結構體&#xff08;Tuple Struct&#xff09;5.3.2 類單元結構體&#xff08;Unit-Like Str…

ELK日志分析系統(filebeat+logstash+elasticsearch+kibana)

一、ELK 平臺介紹 1、ELK 概述 日志主要包括系統日志、應用程序日志和安全日志。系統運維和開發人員可以通過日志了解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日志可以了解服務器的負荷&#xff0c;性能安全性&#xff0c;從而及時采取措施糾正錯誤。…

JS基礎4—jQuery

jQuery常用內容 jQuery 介紹jQuery 獲取方式基本選擇器 (最常用)層級選擇器 (基于元素間關系)過濾選擇器 (基于特定條件) jQuery事件綁定jQuery 方法調用jQuery遍歷jQuery 獲取與設置jQuery 添加與刪除jQuery CSS 類jQuery - AJAX 總結 jQuery 介紹 jQuery 是一個輕量級、快速…

時鐘周期是什么?

時鐘周期&#xff08;Clock Cycle&#xff09;是什么&#xff1f; 時鐘周期&#xff08;Clock Cycle&#xff09;是計算機系統中一個最基礎的時間單位&#xff0c;也稱為時鐘節拍或時鐘周期時間&#xff08;Clock Period&#xff09;。它由系統時鐘發生器產生的一個周期性脈沖…

如何用SEO優化長尾關鍵詞?

內容概要 在SEO優化領域&#xff0c;長尾關鍵詞扮演著至關重要的角色&#xff0c;它們能有效提升網站在搜索引擎中的可見度和流量轉化率。本文將全面解析如何通過系統方法優化長尾關鍵詞&#xff0c;涵蓋從基礎理論到實戰應用的完整流程。核心內容包括利用專業工具進行關鍵詞挖…

電子面單系統開發全解析

一、如果要做電子面單系統&#xff0c;怎么做&#xff1f; 開發電子面單系統是一項復雜且涉及多方面考量的工程&#xff0c;涵蓋需求分析、系統架構設計、技術選型、接口對接、安全性保障、第三方服務選擇以及部署與維護等關鍵環節。 電子面單系統開發步驟 需求分析&#xf…

UE5 - 制作《塞爾達傳說》中林克的技能 - 18 - 磁力抓取器

讓我們繼續《塞爾達傳說》中林克技能的制作!!! UE版本:5.6.0 VS版本:2022 本章節的核心目標:磁力抓取器 先讓我們看一下完成后的效果: 18_磁力抓取器 大綱如下: 引言功能架構與核心邏輯物理材質與場景配置代碼實現:從識別到操控操作說明1.引言 在《塞爾達傳說》中,林…

基于ApachePOI實現百度POI分類快速導入PostgreSQL數據庫實戰

目錄 前言 一、百度POI分類簡介 1、數據表格 2、分類結構 二、從Excel導入到PG數據庫 1、Excel解析流程 2、數據入庫 3、入庫成果及檢索 三、總結 前言 在上一篇博文中&#xff0c;我們對高德POI分類進行了深入剖析 并對Excel 中 POI 分類數據的存儲結構特點進行了詳細介…

學習經驗分享【41】YOLOv13:基于超圖增強自適應視覺感知的實時目標檢測

YOLO算法更新速度很快&#xff0c;已經出到V13版本&#xff0c;后續大家有想發論文或者搞項目可更新自己的baseline了。 摘要&#xff1a;YOLO 系列模型憑借其卓越的精度和計算效率&#xff0c;在實時目標檢測領域占據主導地位。然而&#xff0c;YOLOv11 及早期版本的卷積架構&…

Handling outliers in non-blind image deconvolution論文閱讀

Handling outliers in non-blind image deconvolution 1. 研究目標與實際意義2. 創新方法:基于EM的異常值建模2.1 新模糊模型2.1.1 目標函數2.2 EM框架:迭代優化二元掩碼2.2.1 E步:計算后驗權重 E [ m x ] E[m_x] E[mx?]2.2.2 M步:加權正則化反卷積2.3 優化加速技術2.3.1…

Redis 功能擴展:Lua 腳本對 Redis 的擴展

Redis 是一個高性能的內存數據庫&#xff0c;支持多種數據結構&#xff0c;如字符串、哈希、列表、集合和有序集合。為了增強其功能&#xff0c;Redis 引入了 Lua 腳本支持&#xff0c;使開發者可以編寫自定義的腳本&#xff0c;確保操作的原子性并提高復雜操作的性能。本文將詳…

七天學完十大機器學習經典算法-06.支持向量機(SVM):分類邊界的藝術——深入淺出指南

接上一篇《七天學完十大機器學習經典算法-05.從投票到分類&#xff1a;K近鄰(KNN)算法完全指南》 想象你要在操場上為兩個班級劃活動區域&#xff0c;如何畫出一條最公平的分界線&#xff1f;這條線不僅要分開兩班學生&#xff0c;還要讓兩個班都離分界線盡可能遠——這就是支持…

python如何安裝PyQt6-stubs依賴包

PyQt6-stubs 是為 PyQt6 提供類型提示&#xff08;Type Hints&#xff09;和 IDE 智能補全支持的第三方補丁包&#xff0c;特別適用于 PyCharm、VS Code 等現代 IDE。它對開發者在編碼時幫助極大。 一、安裝方法 需要提前安裝好git&#xff0c;然后克隆PyQt6-stubs源碼&#xf…

創宇智腦 MCP 賦能 AiPy,IP 風險調查效率實現 10 倍飛躍,威脅分析一鍵生成

還記得上個月那個焦頭爛額的凌晨三點嗎&#xff1f;監控大屏突然瘋狂閃爍&#xff0c;500 多個 IP 地址同時出現異常訪問&#xff0c;密密麻麻的數據流在屏幕上跳動&#xff0c;像極了一張讓人窒息的大網。我和團隊成員瞪著布滿血絲的眼睛&#xff0c;手動排查每一個 IP&#x…