一、技能配景
随着大语言模子(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/miniconda3
- echo '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
复制代码- <img alt="" src="https://i-blog.csdnimg.cn/direct/361cd8a87975486bb962fa4f6ef4c626.png" />
复制代码
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 性能测试
- <img alt="" src="https://i-blog.csdnimg.cn/direct/7bf05501fbff4b48968d6e9311e1456a.png" />
- <strong>模拟 30 并发:</strong>
复制代码
模拟 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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |