SGLang 實戰介紹 (張量并行 / Qwen3 30B MoE 架構部署)

一、技術背景

隨著大語言模型(LLM)的飛速發展,如何更高效、更靈活地駕馭這些強大的模型生成我們期望的內容,成為了開發者們面臨的重要課題。傳統的通過拼接字符串、管理復雜的狀態和調用 API 的方式,在處理復雜任務時顯得力不從心。正是在這樣的背景下,SGlang (Structured Generation Language) 應運而生,它旨在成為連接用戶意圖與 LLM 生成能力之間的橋梁,提供一種更高效、更具控制力的 LLM 交互方式

二、SGlang 介紹

2.1 核心概念

SGLang 的核心概念圍繞著如何將復雜的 LLM 生成任務分解和控制:

  • SGLang 程序 (SGLang Program): 這是 SGLang 的基本執行單元。一個 SGLang 程序定義了一系列與 LLM 交互的指令和邏輯。

  • 生成原語 (Generation Primitives): SGLang 提供了一系列內置的指令,用于控制 LLM 的文本生成。這些原語包括:gen:用于生成文本。select:用于從多個選項中選擇一個。capture:用于捕獲 LLM 生成的特定部分內容。

  • 控制流 (Control Flow): SGLang 支持類似傳統編程語言的控制流結構,如條件判斷(if/else)、循環(for)等。這使得開發者可以根據 LLM 的中間生成結果動態地調整后續的生成策略。

  • 并行執行 (Parallel Execution): SGLang 允許并行執行多個生成任務或生成分支,從而提高效率。

  • 狀態管理 (State Management): SGLang 程序可以維護狀態,并在不同的生成步驟之間傳遞信息。

  • 模板化 (Templating): 支持靈活的文本模板,方便構建動態的提示。

2.2 組成部分

一個典型的 SGLang 系統通常包含以下幾個關鍵組成部分:

  • SGLang 語言解釋器/編譯器 (SGLang Interpreter/Compiler): 負責解析和執行 SGLang 程序。它將 SGLang 代碼轉換為對底層 LLM 運行時的操作序列。

  • LLM 運行時 (LLM Runtime): 這是實際執行 LLM 推理的部分。SGLang 旨在與多種不同的 LLM 后端(如 vLLM、Hugging Face Transformers 等)集成。SGLang 的運行時優化是其核心優勢之一,它通過將控制流直接卸載到 KV 緩存中,實現了高效的執行。

  • SGLang API/SDK: 提供給開發者的接口,用于編寫、部署和管理 SGLang 程序。

2.3 關鍵技術

SGLang 的實現依賴于以下一些關鍵技術:

  • 基于提示的執行 (Prompt-based Execution with Advanced Control): 雖然仍然以提示為基礎,但 SGLang 通過其語言結構提供了更高級別的控制。

  • KV 緩存優化 (KV Cache Optimization): 這是 SGLang 實現高性能的關鍵。傳統的 LLM 調用在每次生成時都需要重新計算和填充 KV 緩存(鍵值緩存,用于存儲注意力機制的中間結果)。SGLang 通過將控制邏輯(如 if/else, for 循環, select)直接在 KV 緩存層面進行管理和復用,顯著減少了冗余計算和數據傳輸,從而大幅提升了執行速度,特別是在需要復雜控制流和多輪交互的場景下。

  • Radix Tree (基數樹) 和 Token Healing: 用于高效地管理和重用提示(prompts)以及修復因 tokenization 邊界問題導致的生成不連貫的情況。Radix Tree 允許多個并發請求共享和重用共同的前綴提示,從而節省了重復處理的時間和內存。Token Healing 則用于確保在 select 或其他需要精確匹配的場景下,即使 LLM 的生成結果在 token 邊界上與預期不完全一致,也能進行有效的校正。

  • 與后端 LLM 推理引擎的緊密集成: SGLang 不是一個獨立的 LLM,而是一個運行在現有 LLM 推理引擎之上的控制層。它通過與 vLLM 等高性能推理后端的深度集成,充分利用這些后端的優化能力。

  • 聲明式與命令式編程的結合: SGLang 允許開發者以聲明式的方式定義生成目標(例如,生成一個 JSON 對象),同時也提供了命令式的控制流結構來指導生成過程。

2.4 優勢與價值

SGLang 為開發者和應用帶來了顯著的優勢和價值:

  • 顯著的性能提升 (Significant Performance Improvement): 通過 KV 緩存優化、Radix Tree 和并行執行等技術,SGLang 可以大幅度提高 LLM 應用的吞吐量并降低延遲,尤其是在需要復雜交互和控制流的任務中(例如,多輪對話、結構化數據生成、Agent 模擬等)。有報告稱其速度比傳統方法快幾倍甚至幾十倍。

  • 增強的可控性 (Enhanced Controllability): 開發者可以更精確地控制 LLM 的生成過程,包括強制輸出格式、實現條件邏輯、從多個選項中進行選擇等。這使得構建更可靠、更符合預期的 LLM 應用成為可能。

  • 更高的開發效率和可維護性 (Improved Developer Productivity and Maintainability): SGLang 提供了更接近傳統編程的體驗,使得編寫、調試和維護復雜的 LLM 應用更加容易。將控制邏輯從冗長的提示中分離出來,使得代碼更清晰、更模塊化。

  • 降低成本 (Reduced Cost): 通過提高推理效率,可以減少對計算資源的需求,從而降低運行 LLM 應用的成本。

  • 促進復雜 LLM 應用的開發 (Facilitates Development of Complex LLM Applications): 使得構建需要精細控制和高效執行的復雜應用(如多步驟推理、模擬、內容生成流水線、以及各種 Agent 應用)變得更加可行。

  • 后端無關性 (Backend Agnostic - to some extent): 雖然與特定后端(如 vLLM)集成可以獲得最佳性能,但其設計理念是希望能夠支持多種 LLM 推理后端。

2.5 SGLang vs vLLM

三、SGlang 實戰

3.1 基礎環境配置

服務器資源申請請參考:

Qwen2.5 7B 極簡微調訓練_qwen-7b訓練-CSDN博客文章瀏覽閱讀310次,點贊4次,收藏6次。實現 qwen 2.5 7b 模型微調實驗,并打包好模型最后發布到 huggingface_qwen-7b訓練 https://blog.csdn.net/weixin_39403185/article/details/147115232?spm=1001.2014.3001.5501

sudo apt update && upgrade -y
sudo apt install build-essential cmake -y
# 安裝 conda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /data/Miniconda3.sh
bash /data/Miniconda3.sh -b -p /data/miniconda3echo 'export PATH="/data/miniconda3/bin:$PATH"' >> ~/.bashrc
source /data/miniconda3/bin/activate
source ~/.bashrc# 安裝 conda 訓練環境
conda create -n llm python=3.10 -y
conda activate llm
echo 'conda activate llm' >> ~/.bashrc
source ~/.bashrc
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install "sglang[all]"

3.2?SGlang 單機部署測試

服務器申請: 一臺 A10 先顯卡的服務器即可

a) 基礎環境配置

參考 3.1

b) 模型準備

mkdir -p /data/models
huggingface-cli download Qwen/Qwen3-8B --resume-download --local-dir /data/models/qwen3-8b

c) 單機部署

python -m sglang.launch_server \
--model-path /data/models/qwen3-8b \
--port 8000 --host 0.0.0.0

d) 測試推理模型

curl http://localhost:8000/v1/completions \-H "Content-Type: application/json" \-d '{"model": "Qwen/Qwen2-7B-Instruct","prompt": "你好,請介紹一下你自己以及 SGLang。","max_tokens": 150,"temperature": 0.7}' | jq

watch -n 0.5 nvidia-smi

3.3?SGlang 推理模型張量并行

服務器申請: 2臺 A10 先顯卡的服務器即可

詳情可以參考:

a) 基礎環境配置

參考 3.1

b) 模型準備

參考 3.4 模型準備

c) 張量并行部署

# te1 節點執行
python -m sglang.launch_server \--model-path /data/models/qwen3-8b \--host 0.0.0.0 \--port 8000 \--log-level info \--trust-remote-code \--dtype auto \--mem-fraction-static 0.85 \--tensor-parallel-size 2 \--nnodes 2 \--node-rank 0 \--dist-init-addr "te1:29500" \--dist-timeout 600
# te2 節點執行
python -m sglang.launch_server \--model-path /data/models/qwen3-8b \--host 0.0.0.0 \--port 8001 \--log-level info \--trust-remote-code \--dtype auto \--mem-fraction-static 0.85 \--tensor-parallel-size 2 \--nnodes 2 \--node-rank 1 \--dist-init-addr "te1:29500" \--dist-timeout 600

te1 日志

te2?日志

d) 測試推理模型

3.4?SGlang MoE 推理模型

服務器申請: 4臺 A10 先顯卡的服務器即可

a) 基礎環境準備

參考 3.1

b) 模型準備 (MoE 架構的 Qwen3 -30B)

Qwen/Qwen3-30B-A3B 模型準備:

模型很大約 60Gi 要下載很久很久。

mkdir -p /data/models
huggingface-cli download Qwen/Qwen3-30B-A3B --resume-download --local-dir /data/models/Qwen3-30B-A3B

c) SGLang 部署 MoE Qwen3 30B

# te1 節點執行
python -m sglang.launch_server \--model-path /data/models/Qwen3-30B-A3B \--host 0.0.0.0 \--port 8000 \--log-level info \--trust-remote-code \--dtype auto \--mem-fraction-static 0.85 \--attention-backend flashinfer \--tensor-parallel-size 4 \--nnodes 4 \--node-rank 0 \--dist-init-addr "te1:29500" \--dist-timeout 600 \--enable-ep-moe \--ep-size 4
# te2 節點執行
python -m sglang.launch_server \--model-path /data/models/Qwen3-30B-A3B \--host 0.0.0.0 \--port 8000 \--log-level info \--trust-remote-code \--dtype auto \--mem-fraction-static 0.85 \--attention-backend flashinfer \--tensor-parallel-size 4 \--nnodes 4 \--node-rank 1 \--dist-init-addr "te1:29500" \--dist-timeout 600--enable-ep-moe \--ep-size 4
# te3 節點執行
python -m sglang.launch_server \--model-path /data/models/Qwen3-30B-A3B \--host 0.0.0.0 \--port 8000 \--log-level info \--trust-remote-code \--dtype auto \--mem-fraction-static 0.85 \--attention-backend flashinfer \--tensor-parallel-size 4 \--nnodes 4 \--node-rank 2 \--dist-init-addr "te1:29500" \--dist-timeout 600--enable-ep-moe \--ep-size 4
# te4 節點執行
python -m sglang.launch_server \--model-path /data/models/Qwen3-30B-A3B \--host 0.0.0.0 \--port 8000 \--log-level info \--trust-remote-code \--dtype auto \--mem-fraction-static 0.85 \--attention-backend flashinfer \--tensor-parallel-size 4 \--nnodes 4 \--node-rank 3 \--dist-init-addr "te1:29500" \--dist-timeout 600--enable-ep-moe \--ep-size 4

te1 節點上運行日志?

te2,te3,te4節點上日志都差不多 我就保留了 te2 的運行情況?

d) 測試推理模型

curl http://localhost:8000/v1/completions \-H "Content-Type: application/json" \-d '{"model": "Qwen/Qwen2-7B-Instruct","prompt": "請介紹一下自己","max_tokens": 150,"temperature": 0.7}' | jq

e) locust 性能測試


模擬 30 并發:

模擬 100 并發:

補充代碼:

## 調試專用
## te1
watch nvidia-smi
kill -9 pid
netstat -tulnp | grep :8000
netstat -tulnp | grep :29500## te2
nvidia-smi
kill -9 pid
netstat -tulnp | grep :8001

四、小結

SGlang技術還是相當成熟的,使用下來基本上沒有什么 bug 或者莫名的報錯,顯存管理控制也是非常好。測試調試最順暢的一次。針對SGlang部署推理模型 單機版,張量并行和 MoE 形式的都提供了完整的示例。最后也提供了性能測試的相關內容。

參考:

Server Arguments — SGLanghttps://docs.sglang.ai/backend/server_arguments.htmlGitHub - sgl-project/sglang: SGLang is a fast serving framework for large language models and vision language models.SGLang is a fast serving framework for large language models and vision language models. - sgl-project/sglanghttps://github.com/sgl-project/sglangLarge Language Models — SGLanghttps://docs.sglang.ai/supported_models/generative_models.htmlhttps://huggingface.co/Qwen/Qwen3-30B-A3Bhttps://huggingface.co/Qwen/Qwen3-30B-A3B大語言模型中的MoE - 哥不是小蘿莉 - 博客園1.概述 MoE代表“混合專家模型”(Mixture of Experts),這是一種架構設計,通過將不同的子模型(即專家)結合起來進行任務處理。與傳統的模型相比,MoE結構能夠動態地選擇并激活其中一部分專家,從而顯著提升模型的效率和性能。尤其在計算和參數規模上,MoE架構能夠在保持較低計算開銷的同https://www.cnblogs.com/smartloli/p/18577833

https://huggingface.co/blog/zh/moehttps://huggingface.co/blog/zh/moe

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

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

相關文章

微服務中 本地啟動 springboot 無法找到nacos配置 啟動報錯

1. 此處的環境變量需要匹配nacos中yml配置文件名的后綴 對于粗心的小伙伴在切換【測試】【開發】環境的nacos使用時會因為這里導致項目總是無法啟動成功

Lua從字符串動態構建函數

在 Lua 中,你可以通過 load 或 loadstring(Lua 5.1)函數從字符串動態構建函數。以下是一個示例: 示例 1:基本動態函數構建 -- 動態構建一個函數 local funcStr "return function(a, b) return a b end"-…

【Python】?Python單元測試框架unittest總結

1. 本期主題:Python單元測試框架unittest詳解 unittest是Python內置的單元測試框架,遵循Java JUnit的"測試驅動開發"(TDD)理念,通過繼承TestCase類實現測試用例的模塊化組織。本文聚焦于獨立測試腳本的編寫…

【Python 實戰】---- 使用Python批量將 .ncm 格式的音頻文件轉換為 .mp3 格式

1. 前言 .ncm 格式是網易云音樂專屬的加密音頻格式,用于保護版權。這種格式無法直接播放,需要解密后才能轉換為常見的音頻格式。本文將介紹如何使用 Python 批量將 .ncm 格式的音頻文件轉換為 .mp3 格式。 2. 安裝 ncmdump ncmdump 是一個專門用于解密 .ncm 文件的工具。它…

Linux 學習筆記2

Linux 學習筆記2 一、定時任務調度操作流程注意事項 二、磁盤分區與管理添加新硬盤流程磁盤管理命令 三、進程管理進程操作命令服務管理(Ubuntu) 四、注意事項 一、定時任務調度 操作流程 創建腳本 vim /path/to/script.sh # 編寫腳本內容設置可執行權…

YOLO目標檢測算法

文章目錄 前言一、目標檢測算法簡介1、傳統目標檢測算法(1)R-CNN算法簡介(2)Fast R-CNN算法簡介(3)Faster R-CNN算法簡介 2、目標檢測中的算法設計范式(1)one-stage(2&am…

【軟件設計師:軟件】20.軟件設計概述

一、軟件設計基本原則 一、軟件設計基本原則 1. 模塊 是指執行某一特定任務的數據結構和程序代碼。 將模塊的接口和功能定義為其外部特性將模塊的局部數據和實現該模塊的程序代碼稱為內部特性。在模塊設計時,最重要的原則就是實現信息隱蔽和模塊獨立。 2 . 信息隱蔽 將每…

軟件工程之面向對象分析深度解析

前文基礎: 1.軟件工程學概述:軟件工程學概述-CSDN博客 2.軟件過程深度解析:軟件過程深度解析-CSDN博客 3.軟件工程之需求分析涉及的圖與工具:軟件工程之需求分析涉及的圖與工具-CSDN博客 4.軟件工程之形式化說明技術深度解…

需求分析階段測試工程師主要做哪些事情

在軟件測試需求分析階段,主要圍繞確定測試范圍、明確測試目標、細化測試內容等方面開展工作,為后續測試計劃的制定、測試用例的設計以及測試執行提供清晰、準確的依據。以下是該階段具體要做的事情: 1. 需求收集與整理 收集需求文檔&#x…

vLLM部署Qwen2-7B模型推理

vllm簡介 vLLM是一個高效的大語言模型推理和部署服務系統,專為大型語言模型的高效執行而設計。它不僅支持多種量化技術以減少模型大小和加速推理過程,還提供了與OpenAI API兼容的服務接口,使得現有的應用程序能夠無縫對接。 一、前提環境 …

【STM32 學習筆記】GPIO輸入與輸出

GPIO詳解 一、GPIO基本概念 GPIO(通用輸入輸出)是微控制器與外部設備交互的核心接口,具有以下特性: 可編程控制輸入/輸出模式支持數字信號的讀取與輸出集成多種保護機制復用功能支持片上外設連接 二、GPIO位結構解析 2.1 保護二…

安科瑞光伏綜自系統在新能源電站中的應用及調度上傳方案研究

摘要 隨著全球對清潔能源需求的不斷增長,光伏發電作為一種可持續的能源解決方案,正迅速發展。光伏綜合自動化系統(綜自系統)在確保光伏電站高效、穩定運行方面起著關鍵作用。本文詳細介紹了安科瑞光伏綜自系統,包括其背…

[python] 函數2-匿名函數

一 匿名函數 格式: 函數名 lambda 形參 : 返回值(表達式) 調用: 結果 函數名(實參) 一般只有一行代碼,他是對def定義函數的一種簡化,只能實現簡單的邏輯 邏輯復雜時不要使用lambda add lambda a,b: ab # a,b就是形參 print(add(2,5)) 1.1 無參數 noargs_func lambda…

深入理解C/C++內存管理:從基礎到高級優化實踐

一、內存區域劃分與基礎管理機制?? ??棧(Stack)?? 棧由系統自動管理,用于存儲函數調用時的局部變量、參數及返回地址。其特點是高效但空間有限(通常1-8MB),遵循后進先出(LIFO)…

kafka 面試總結

Kafka的冪等性是一種機制,確保生產者發送的每條消息在Broker端只被持久化一次,即使生產者因網絡問題等原因重試發送,也不會導致消息重復。 實現原理 生產者ID(PID) 每個生產者實例在初始化時,會被分配一個…

uniapp|實現多終端聊天對話組件、表情選擇、消息發送

基于UniApp框架,實現跨平臺多終端適配的聊天對話組件開發、表情選擇交互設計及消息發送,支持文本與表情混合渲染。 目錄 聊天界面靜態組件實現消息列表布局消息氣泡雙向布局輔助元素定位與樣式靜態數據模擬與擴展性設計表情選擇器靜態模塊浮層實現符號網格排列多端樣式適配方…

LabVIEW超聲波液位計檢定

在工業生產、運輸和存儲等環節,液位計的應用十分廣泛,其中超聲波液位計作為非接觸式液位測量設備備受青睞。然而,傳統立式水槽式液位計檢定裝置存在受建筑高度影響、量程范圍受限、流程耗時長等問題,無法滿足大量程超聲波液位計的…

C++漫步結構與平衡的殿堂:AVL樹

文章目錄 1.AVL樹的概念2.AVL樹的結構3.AVL樹的插入4.AVL樹的旋轉4.1 左單旋4.2 右單旋4.3 右左雙旋4.4 左右雙旋 5.AVL樹的刪除6.AVL樹的高度7.AVL樹的平衡判斷希望讀者們多多三連支持小編會繼續更新你們的鼓勵就是我前進的動力! 二叉搜索樹有其自身的缺陷&#xf…

Verilog Test Fixture 時鐘激勵

1、占空比50%時鐘產生 always begin<clock> 1b0 ;#<PERIOD/2> ;<clock> 1b1 ;#<PERIOD/2> ; end reg <clock> 1b0 ;alwaysbegin#<PERIOD/2> ;<clock> ~<clock> ;end 2…

從人體姿態到機械臂軌跡:基于深度學習的Kinova遠程操控系統架構解析

在工業自動化、醫療輔助、災難救援與太空探索等前沿領域&#xff0c;Kinova輕型機械臂憑借7自由度關節設計和出色負載能力脫穎而出。它能精準完成物體抓取、復雜裝配和精細操作等任務。然而&#xff0c;實現人類操作者對Kinova機械臂的直觀高效遠程控制一直是技術難題。傳統遠程…