SGLang 实战介绍 (张量并行 / Qwen3 30B MoE 架构摆设)

打印 上一主题 下一主题

主题 1790|帖子 1790|积分 5370

一、技能配景

随着大语言模子(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
  1. sudo apt update && upgrade -y
  2. sudo apt install build-essential cmake -y
复制代码
  1. # 安装 conda
  2. wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /data/Miniconda3.sh
  3. bash /data/Miniconda3.sh -b -p /data/miniconda3
  4. echo 'export PATH="/data/miniconda3/bin:$PATH"' >> ~/.bashrc
  5. source /data/miniconda3/bin/activate
  6. source ~/.bashrc
  7. # 安装 conda 训练环境
  8. conda create -n llm python=3.10 -y
  9. conda activate llm
  10. echo 'conda activate llm' >> ~/.bashrc
  11. source ~/.bashrc
复制代码
  1. pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
  2. pip install "sglang[all]"
复制代码
3.2 SGlang 单机摆设测试

服务器申请: 一台 A10 先显卡的服务器即可
a) 基础情况配置

参考 3.1
b) 模子预备

  1. mkdir -p /data/models
  2. huggingface-cli download Qwen/Qwen3-8B --resume-download --local-dir /data/models/qwen3-8b
复制代码




c) 单机摆设

  1. python -m sglang.launch_server \
  2. --model-path /data/models/qwen3-8b \
  3. --port 8000 --host 0.0.0.0
复制代码


d) 测试推理模子

  1. curl http://localhost:8000/v1/completions \
  2.   -H "Content-Type: application/json" \
  3.   -d '{
  4.     "model": "Qwen/Qwen2-7B-Instruct",
  5.     "prompt": "你好,请介绍一下你自己以及 SGLang。",
  6.     "max_tokens": 150,
  7.     "temperature": 0.7
  8.   }' | jq
复制代码
  1. <img alt=""  src="https://i-blog.csdnimg.cn/direct/361cd8a87975486bb962fa4f6ef4c626.png"  />
复制代码
  1. watch -n 0.5 nvidia-smi
复制代码


3.3 SGlang 推理模子张量并行

服务器申请: 2台 A10 先显卡的服务器即可
详情可以参考:
a) 基础情况配置

参考 3.1
b) 模子预备

参考 3.4 模子预备
c) 张量并行摆设

  1. # te1 节点执行
  2. python -m sglang.launch_server \
  3.     --model-path /data/models/qwen3-8b \
  4.     --host 0.0.0.0 \
  5.     --port 8000 \
  6.     --log-level info \
  7.     --trust-remote-code \
  8.     --dtype auto \
  9.     --mem-fraction-static 0.85 \
  10.     --tensor-parallel-size 2 \
  11.     --nnodes 2 \
  12.     --node-rank 0 \
  13.     --dist-init-addr "te1:29500" \
  14.     --dist-timeout 600
复制代码
  1. # te2 节点执行
  2. python -m sglang.launch_server \
  3.     --model-path /data/models/qwen3-8b \
  4.     --host 0.0.0.0 \
  5.     --port 8001 \
  6.     --log-level info \
  7.     --trust-remote-code \
  8.     --dtype auto \
  9.     --mem-fraction-static 0.85 \
  10.     --tensor-parallel-size 2 \
  11.     --nnodes 2 \
  12.     --node-rank 1 \
  13.     --dist-init-addr "te1:29500" \
  14.     --dist-timeout 600
复制代码
te1 日志

te2 日志

d) 测试推理模子




3.4 SGlang MoE 推理模子



服务器申请: 4台 A10 先显卡的服务器即可
a) 基础情况预备

参考 3.1

b) 模子预备 (MoE 架构的 Qwen3 -30B)

Qwen/Qwen3-30B-A3B 模子预备:
模子很约莫 60Gi 要下载很久很久。
  1. mkdir -p /data/models
  2. huggingface-cli download Qwen/Qwen3-30B-A3B --resume-download --local-dir /data/models/Qwen3-30B-A3B
复制代码


c) SGLang 摆设 MoE Qwen3 30B

  1. # te1 节点执行
  2. python -m sglang.launch_server \
  3.     --model-path /data/models/Qwen3-30B-A3B \
  4.     --host 0.0.0.0 \
  5.     --port 8000 \
  6.     --log-level info \
  7.     --trust-remote-code \
  8.     --dtype auto \
  9.     --mem-fraction-static 0.85 \
  10.     --attention-backend flashinfer \
  11.     --tensor-parallel-size 4 \
  12.     --nnodes 4 \
  13.     --node-rank 0 \
  14.     --dist-init-addr "te1:29500" \
  15.     --dist-timeout 600 \
  16.     --enable-ep-moe \
  17.     --ep-size 4
复制代码
  1. # te2 节点执行
  2. python -m sglang.launch_server \
  3.     --model-path /data/models/Qwen3-30B-A3B \
  4.     --host 0.0.0.0 \
  5.     --port 8000 \
  6.     --log-level info \
  7.     --trust-remote-code \
  8.     --dtype auto \
  9.     --mem-fraction-static 0.85 \
  10.     --attention-backend flashinfer \
  11.     --tensor-parallel-size 4 \
  12.     --nnodes 4 \
  13.     --node-rank 1 \
  14.     --dist-init-addr "te1:29500" \
  15.     --dist-timeout 600
  16.     --enable-ep-moe \
  17.     --ep-size 4
复制代码
  1. # te3 节点执行
  2. python -m sglang.launch_server \
  3.     --model-path /data/models/Qwen3-30B-A3B \
  4.     --host 0.0.0.0 \
  5.     --port 8000 \
  6.     --log-level info \
  7.     --trust-remote-code \
  8.     --dtype auto \
  9.     --mem-fraction-static 0.85 \
  10.     --attention-backend flashinfer \
  11.     --tensor-parallel-size 4 \
  12.     --nnodes 4 \
  13.     --node-rank 2 \
  14.     --dist-init-addr "te1:29500" \
  15.     --dist-timeout 600
  16.     --enable-ep-moe \
  17.     --ep-size 4
复制代码
  1. # te4 节点执行
  2. python -m sglang.launch_server \
  3.     --model-path /data/models/Qwen3-30B-A3B \
  4.     --host 0.0.0.0 \
  5.     --port 8000 \
  6.     --log-level info \
  7.     --trust-remote-code \
  8.     --dtype auto \
  9.     --mem-fraction-static 0.85 \
  10.     --attention-backend flashinfer \
  11.     --tensor-parallel-size 4 \
  12.     --nnodes 4 \
  13.     --node-rank 3 \
  14.     --dist-init-addr "te1:29500" \
  15.     --dist-timeout 600
  16.     --enable-ep-moe \
  17.     --ep-size 4
复制代码
te1 节点上运行日志 


te2,te3,te4节点上日志都差不多 我就保留了 te2 的运行情况 


d) 测试推理模子

  1. curl http://localhost:8000/v1/completions \
  2.   -H "Content-Type: application/json" \
  3.   -d '{
  4.     "model": "Qwen/Qwen2-7B-Instruct",
  5.     "prompt": "请介绍一下自己",
  6.     "max_tokens": 150,
  7.     "temperature": 0.7
  8.   }' | jq
复制代码

e) locust 性能测试


  1. <img alt=""  src="https://i-blog.csdnimg.cn/direct/7bf05501fbff4b48968d6e9311e1456a.png"  />
  2. <strong>模拟 30 并发:</strong>
复制代码



模拟 100 并发:



补充代码:
  1. ## 调试专用
  2. ## te1
  3. watch nvidia-smi
  4. kill -9 pid
  5. netstat -tulnp | grep :8000
  6. netstat -tulnp | grep :29500
  7. ## te2
  8. nvidia-smi
  9. kill -9 pid
  10. netstat -tulnp | grep :8001
复制代码
四、小结

SGlang技能还是相称成熟的,使用下来根本上没有什么 bug 或者莫名的报错,显存管理控制也是非常好。测试调试最顺畅的一次。针对SGlang摆设推理模子 单机版,张量并行和 MoE 情势的都提供了完备的示例。最后也提供了性能测试的相关内容。
参考:

Server Arguments — SGLang
https://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/sglang
https://github.com/sgl-project/sglangLarge Language Models — SGLang
https://docs.sglang.ai/supported_models/generative_models.htmlhttps://huggingface.co/Qwen/Qwen3-30B-A3B
https://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/moe
https://huggingface.co/blog/zh/moe


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表