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.mzph.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机械臂的直观高效远程控制一直是技术难题。传统远程…