SGlang 推理模型優化(PD架構分離)

一、技術背景

隨著大型語言模型(LLM)廣泛應用于搜索、內容生成、AI助手等領域,對模型推理服務的并發能力、響應延遲和資源利用效率提出了前所未有的高要求。與模型訓練相比,推理是一個持續進行、資源消耗巨大的任務,尤其在實際業務中,推理服務需要同時支持大量用戶請求,保證實時性和穩定性。

在傳統架構中,LLM 的輸入處理(Prefill)和輸出生成(Decode)階段往往混合部署在同一批 GPU 上。這種“統一架構”雖然實現簡單,但很快暴露出嚴重的性能瓶頸和資源調度困境:Prefill 階段計算密集、耗時長,容易阻塞 Decode 階段對低延遲的需求,導致整體吞吐和響應速度下降;而 Decode 階段則受制于 KV Cache 帶寬和訪問延遲,難以并發擴展

二、PD 分離介紹討論

2.1 Prefill階段:特征與計算需求

Prefill階段負責并行處理輸入提示中的所有詞元,生成第一個輸出詞元,并計算初始的鍵值緩存 (Key-Value Cache, KV Cache) 。其主要特征是計算密集型 (computationally intensive),通常受限于計算資源 (compute-bound),尤其是在處理較長提示時。在此階段,模型對輸入序列中的每個詞元進行并行計算,通常涉及大規模的矩陣-矩陣運算,能夠充分利用GPU的并行計算能力,甚至使其達到飽和狀態。

2.3 Decode階段:特征與計算需求

Decode階段以自回歸的方式逐個生成后續的輸出詞元。在Decode的每一步中,模型僅處理最新生成的那個詞元,并結合先前存儲在KV Cache中的上下文信息來預測下一個詞元。與Prefill階段不同,Decode階段每個詞元的計算量相對較小,但其主要瓶頸在于內存帶寬 (memory-bandwidth-bound) 。這是因為每個解碼步驟都需要頻繁訪問和讀取不斷增長的KV Cache,涉及的操作主要是矩陣-向量運算。盡管只處理一個新詞元,但其對模型權重和KV Cache的I/O需求與Prefill階段相似。Decode階段可以看作是“逐字逐句地續寫回應”的過程

2.4. KV Cache 機制

KV Cache 是 LLM 高效推理的核心技術。它將每個詞元在 Transformer 計算中生成的 Key 和 Value 向量緩存到 GPU 顯存,避免重復計算,大幅提升生成效率。

  • Prefill 階段:為所有輸入詞元批量生成 KV Cache,計算密集型、強并行。

  • Decode 階段:每生成一個新詞元,都會增量更新 KV Cache,并頻繁讀取全部緩存內容,這使得 Decode 主要受內存帶寬限制。

KV Cache 的容量會隨著輸入和生成序列的長度線性增長,是 GPU 顯存消耗的主要來源。自回歸生成的順序性決定了 Decode 難以高并發,訪問 KV Cache 的效率成為系統瓶頸。高效的 KV Cache 管理和分階段調優是優化大模型推理的關鍵。

2.4 統一架構的局限性(PD Fusion)

實現相對簡單,無需復雜的跨節點通信,Prefill (計算密集) 和 Decode (內存密集) 兩個階段的資源需求和計算特性差異大,在同一組GPU上運行時容易相互干擾,導致GPU資源利用率不均衡。例如,Prefill 可能會搶占 Decode 的計算資源,導致 Decode 延遲增加;或者為了 Decode 的低延遲,Prefill 的批處理大小受限。

2.5 PD 分離式系統 (PD Disaggregation)

優點:

  • 消除干擾:?Prefill 和 Decode 在獨立的硬件資源池中運行,避免了相互的性能干擾。

  • 資源優化:?可以為 Prefill 階段配置計算密集型硬件,為 Decode 階段配置內存密集型硬件,從而更有效地利用資源。

  • 獨立擴展:?可以根據 Prefill 和 Decode 各自的負載情況獨立擴展資源。

  • 提升吞吐量和效率:?通過上述優化,通常能實現更高的系統總吞吐量。

缺點:

  • KV Cache 傳輸:?在 Prefill 階段計算完成的 KV Cache 需要傳輸到 Decode 節點,這個過程會引入額外的延遲和網絡開銷,是 PD 分離架構需要重點優化的環節。

  • 調度復雜性:?需要一個全局調度器來協調 Prefill 和 Decode 任務的分發和管理。

三、kv 緩存分析

3.1 直傳 KV 緩存

通過高速互聯(如 NVIDIA NCCL、NVLink、Infiniband 等)在多 GPU 之間直接傳遞 KV 緩存,無需落盤或經過主機內存。

  • 優點:延遲極低、帶寬極高,非常適合同機或高速互聯環境下多 GPU 間的數據交互。

  • 典型場景:Prefill 生成 KV 后,直接推送到 Decode GPU,適合高性能集群內部。

3.2 LMCache

利用獨立的 KV 緩存服務(如?LMCache),在集群節點間通過高性能網絡或主機內存中轉和管理 KV 數據。

  • 優點:跨主機節點靈活,緩存可設定有效期,支持異步讀寫,適合中大型分布式環境。

  • 典型場景:Prefill 結果寫入 LMCache,Decode 階段可在任意節點拉取所需 KV 緩存,實現解耦與彈性擴縮容。

3.3 共享緩存磁盤

將 KV 緩存寫入分布式文件系統或本地共享存儲(如 NFS、Ceph、HDFS),供多節點共享訪問。

  • 優點:實現跨節點持久化、可恢復,可用于極大規模或需要歷史緩存復用的場景。

  • 缺點:讀寫延遲和帶寬通常劣于顯存直傳和內存緩存,僅適合低頻訪問或大規模冷數據。

  • 典型場景:大規模集群、節點動態加入/重啟恢復等需持久化的情況。

3.4 多級緩存

多級緩存是為最大化緩存命中率、降低延遲、平衡成本和容量而設計的一套分層緩存體系,廣泛應用于高性能分布式大模型推理服務中。其核心思想是:優先在最快速的存儲介質中查找和存取 KV 數據,逐層回退至更慢但容量更大的存儲層。

四、SGlang PD 分離實戰

4.1 基礎環境準備

1) GPU 服務器

這里直接選擇單卡雙卡/H800配置測試

2) NCCL 通信網卡

# 查看可用于nccl通信的網卡 在SGlang地方需要指定網卡
ibdev2netdev

3) 推理模型環境

這里為了測試方便我直接采用sglang[all]全部下載。如果有需要可以按需下載各個組件

pip install sglang[all]
pip install mooncake-transfer-engine

4) 基礎模型準備

4.2 推理模型部署

1) prefil 服務啟動

CUDA_VISIBLE_DEVICES=0 python -m sglang.launch_server \--model-path /data/public/model/qwen2.5/qwen2.5-7b-instruct \--port 7000 \--host 0.0.0.0 \--tensor-parallel-size 1 \--disaggregation-mode prefill \--disaggregation-bootstrap-port 8998 \--disaggregation-transfer-backend mooncake \--disaggregation-ib-device mlx5_2 \--max-total-tokens 4096 \--dtype float16 \--trust-remote-code

2) decode 服務啟動

 CUDA_VISIBLE_DEVICES=1 python -m sglang.launch_server \--model-path /data/public/model/qwen2.5/qwen2.5-7b-instruct \--port 7001 \--host 0.0.0.0 \--tensor-parallel-size 1 \--disaggregation-mode decode \--disaggregation-bootstrap-port 8999 \--disaggregation-transfer-backend mooncake \--disaggregation-ib-device mlx5_2 \--max-total-tokens 4096 \--dtype float16 \--trust-remote-code

4.3 簡易版路由 mini_lb

  python -m sglang.srt.disaggregation.mini_lb \--prefill http://127.0.0.1:7000 \--prefill-bootstrap-ports 8998 \--decode http://127.0.0.1:7001 \--host 0.0.0.0 \--port 8000 

4.4 測試

curl -X POST http://localhost:8000/generate   -H "Content-Type: application/json"   -d '{"text": "請介紹一下你自己","max_new_tokens": 32,"temperature": 0.7}'

五、小結

kv 緩存概念理解起來就很痛苦。經過各種查資料問大模型才理解整個過程。相當不容易。現在的示例只是提供了 SGLang 的 Mooncake 框架的直傳也屬于 NCCL 的方式。還沒有體現出分布式多級緩存。如果是生產環境則需要將并行策略和多級緩存融合后再實施。

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

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

相關文章

模型實戰(28)之 yolov5分類模型 訓練自己的數據集

模型實戰(28)之 yolov5分類模型 訓練自己的數據集 本文以手寫數字數據集為例總結YOLO分類模型如何訓練自己的數據集,關于數據集的預處理可以看這篇:https://blog.csdn.net/yohnyang/article/details/148209978?spm=1001.2014.3001.5502 yolov5曾是在 2021-2023 年十分流行…

醫學寫作人才管理策略

1. 人才選擇:精準定位核心能力 1.1 人才篩選標準 1.1.1 硬性要求 初創生物制藥公司醫學寫作崗位對專業背景要求嚴格,候選人需具備醫學、藥學或生物學碩士及以上學歷,博士優先。同時,熟悉ICH、FDA/EMA等法規指南是必備條件,且至少有1-3年醫學寫作經驗,或相關領域如臨床研…

Axure酒店管理系統原型

酒店管理系統通常被設計為包含多個模塊或界面,以支持酒店運營的不同方面和參與者。其中,管理端和商戶端是兩個核心組成部分,它們各自承擔著不同的職責和功能。 軟件版本:Axure RP 9 預覽地址:https://556i1e.axshare.…

云原生安全之HTTP協議:從基礎到實戰的安全指南

🔥「炎碼工坊」技術彈藥已裝填! 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 一、基礎概念:HTTP協議的核心要素 HTTP(HyperText Transfer Protocol)是云原生應用中客戶端與服務器通信的基礎協議&a…

怎樣解決photoshop閃退問題

檢查系統資源:在啟動 Photoshop 之前,打開任務管理器檢查 CPU 和內存的使用情況。如果發現資源占用過高,嘗試關閉不必要的程序或重啟計算機以釋放資源。更新 Photoshop 版本:確保 Photoshop 是最新版本。Adobe 經常發布更新以修復…

修復ubuntu server筆記本合蓋導致的無線網卡故障

下班回到家發現走時還好的局域網 ubuntu server 24 連不上了,趕緊打開筆記本查看下原因,發現控制臺出了一堆看不懂的內容: 根據搜索結果,筆記本合蓋導致無線網卡故障可能與電源管理設置和系統休眠策略有關,以下是具體…

CMake指令:find_package()在Qt中的應用

目錄 1.簡介 2.Qt 核心組件與常用模塊 3.配置模式的工作流程 4.完整示例:構建 Qt GUI 應用 5.常見問題與解決方案 6.總結 1.簡介 在 CMake 中使用 find_package(Qt) 是集成 Qt 庫的核心步驟。Qt 從 5.x 版本開始全面支持 配置模式(Config Mode&…

Docker 鏡像調試最佳實踐

當你已經構建了一個 Docker 鏡像,但運行它的容器啟動后立即退出(通常是因為服務異常或配置錯誤),你仍然可以通過以下幾種方式進入鏡像內部進行調試。 ? 最佳實踐:如何對一個“啟動即退出”的鏡像進行命令行調試&#…

使用Java制作貪吃蛇小游戲

在這篇文章中,我將帶你一步步實現一個經典的貪吃蛇小游戲。我們將使用Java語言和Swing庫來構建這個游戲,它包含了貪吃蛇游戲的基本功能:蛇的移動、吃食物、計分以及游戲結束判定。 游戲設計思路 貪吃蛇游戲的基本原理是:玩家控制…

【linux】umask權限掩碼

umask這個接口在一些程序初始化的時候經常會見到,處于安全性,可以縮小進程落盤文件的權限。 1、linux文件系統的權限規則 文件的默認權限由系統決定(通常是 0666,即所有人可讀可寫)。 目錄的默認權限通常是 0777&am…

esp32cmini SK6812 2個方式

1 #include <SPI.h> // ESP32-C系列的SPI引腳 #define MOSI_PIN 7 // ESP32-C3/C6的SPI MOSI引腳 #define NUM_LEDS 30 // LED燈帶實際LED數量 - 確保與實際數量匹配&#xff01; #define SPI_CLOCK 10000000 // SPI時鐘頻率 // 顏色結構體 st…

互聯網大廠Java求職面試:Spring Cloud微服務架構設計中的挑戰與解決方案

互聯網大廠Java求職面試&#xff1a;Spring Cloud微服務架構設計中的挑戰與解決方案 面試場景設定 鄭薪苦是一位擁有豐富實戰經驗的Java開發者&#xff0c;他正在參加一場由某知名互聯網大廠的技術總監主持的面試。這場面試將圍繞Spring Cloud微服務架構展開&#xff0c;涵蓋…

品鑒JS的魅力之防抖與節流【JS】

前言 小水一波&#xff0c;函數的防抖與節流。 文章目錄 前言介紹實現方式防抖節流 介紹 防抖與節流的優化邏輯&#xff0c;在我們的日常開發中&#xff0c;有著一定的地位。 防抖和節流是兩種常用的性能優化技術&#xff0c;用于限制某個函數在一定時間內被觸發的次數,減少不…

# 使用 Hugging Face Transformers 和 PyTorch 實現信息抽取

使用 Hugging Face Transformers 和 PyTorch 實現信息抽取 在自然語言處理&#xff08;NLP&#xff09;領域&#xff0c;信息抽取是一種常見的任務&#xff0c;其目標是從文本中提取特定類型的結構化信息。本文將介紹如何使用 Hugging Face Transformers 和 PyTorch 實現基于大…

Firecrawl MCP Server 深度使用指南

無論是市場分析師洞察行業動態、研究者收集學術資料&#xff0c;還是開發者為智能應用采集數據&#xff0c;都對網絡數據采集工具提出了極高的要求。Firecrawl MCP Server 應運而生&#xff0c;它宛如一把犀利的 “數字手術刀”&#xff0c;能夠精準地剖析網頁&#xff0c;為用…

OceanBase數據庫全面指南(基礎入門篇)

文章目錄 一、OceanBase 簡介與安裝配置指南1.1 OceanBase 核心特點1.2 架構解析1.3 安裝部署實戰1.3.1 硬件要求1.3.2 安裝步驟詳解1.3.3 配置驗證二、OceanBase 基礎 SQL 語法入門2.1 數據查詢(SELECT)2.1.1 基礎查詢語法2.1.2 實際案例演示2.2 數據操作(INSERT/UPDATE/DE…

幾種環境下的Postgres數據庫安裝

1. Postgres 數據庫介紹 PostgreSQL&#xff08;又稱 Postgres&#xff09;是一種強大、開源的關系型數據庫管理系統&#xff08;RDBMS&#xff09;&#xff0c;它具備高度的可靠性、穩定性和可擴展性&#xff0c;主要特點如下&#xff1a; 開源&#xff1a;PostgreSQL 是基于開…

函數[x]和{x}在數論中的應用

函數[x]和{x}在數論中的應用 函數[x]和{x}的定義與基本性質&#xff08;定義1&#xff0c;命題1&#xff09;定義1例1命題1 函數[x]和{x}的應用&#xff08;定理1&#xff0c;推論1-推論3&#xff09;例2定理1注解5推論1例3例4推論2推論3命題2 函數[x]和{x}的定義與基本性質&am…

Python爬蟲(32)Python爬蟲高階:動態頁面處理與Scrapy+Selenium+BeautifulSoup分布式架構深度解析實戰

目錄 引言一、動態頁面爬取的技術背景1.1 動態頁面的核心特征1.2 傳統爬蟲的局限性 二、技術選型與架構設計2.1 核心組件分析2.2 架構設計思路1. 分層處理2. 數據流 三、代碼實現與關鍵技術3.1 Selenium與Scrapy的中間件集成3.2 BeautifulSoup與Scrapy Item的整合3.3 分布式爬取…

FreeSWITCH rtcp-mux 測試

rtcp 跟 rtp 占用同一個端口&#xff0c;這就是 rtcp 復用 Fs 呼出是這樣的&#xff1a; originate [rtcp_muxtrue][rtcp_audio_interval_msec5000]user/1001 &echo 需要同時指定 rtcp_audio_interval_msec&#xff0c;否則 rtcp_mux 不能生效 Fs 呼入不需要配置&#xf…