当前位置: 首页 > news >正文

SGLang简介

简单来说,SGLang 是一个用于编写和优化与大语言模型(LLMs)交互程序的框架和领域特定语言(DSL)。它的核心目标是让 LLM 的推理过程跑得更快,同时让复杂的提示词(Prompt)逻辑写起来更简单

你可以把它想象成 LLM 世界的 “高性能编程语言”“智能缓存系统”。就像为数据库设计 SQL 语言来高效查询一样,SGLang 是为高效“查询”LLM 而设计的。


核心概念详解

1. 它是什么?

SLLang 由 UC 伯克利等机构的研究人员开发,它包含两个部分:

  1. 一个前端(Frontend):一套 Python API 或 DSL,让你能用更直观、更简洁的方式来表达复杂的、嵌套的提示词逻辑(例如,多轮对话、分支、循环等)。
  2. 一个运行时(Runtime):一个高性能的后端执行引擎,它通过一系列优化技术(如RadixAttention)来加速这些复杂提示词的执行。
2. 它解决的核心问题

当人们用原生代码(如直接调用 OpenAI API 或 Hugging Face 的 transformers 库)运行复杂的 LLM 流程时,会遇到两个痛点:

  • 开发效率低:提示词往往很长且结构复杂(包含系统提示、少样本示例、用户输入、模型回复等)。用字符串拼接或 f-string 来管理它们非常笨拙,容易出错,可读性差。
  • 运行效率低:很多复杂提示词之间存在共享前缀。例如,在同一个应用程序中,不同的请求可能使用相同的系统提示和少样本示例,只有用户输入不同。传统的运行方式会重复处理这些相同的前缀 tokens,造成巨大的计算浪费,导致延迟增加、吞吐量降低。
3. SGLang 的杀手锏:RadixAttention

类似于 vLLM 的 PagedAttention,SGLang 的性能飞跃也来自于其核心技术—— RadixAttention

  • 它是什么:一个在运行时内部自动缓存和复用提示词前缀的智能系统。
  • 如何工作
    1. SGLang 运行时会在内存中维护一个前缀缓存树(Prefix Cache Tree) 或** Radix 树**。
    2. 当处理一个新的请求时,运行时会先检查其提示词前缀(例如,系统提示和少样本示例部分)是否已经存在于缓存树中。
    3. 如果存在,它会直接复用已经计算好的该前缀的 KV Cache(键值缓存),跳过所有重复的计算。只需为变化的部分(如用户输入)进行计算。
  • 带来的好处
    • 极大降低延迟:避免了重复计算,请求的响应速度更快。
    • 显著提升吞吐量:GPU 不再做无用功,可以同时处理更多请求。

主要功能和特点

  1. 直观的编程接口:提供了类似 Python 装饰器 (@sgl.function) 和流畅的链式调用语法,让编写复杂提示词逻辑像写结构化代码一样简单。
  2. 高性能后端:内置了 RadixAttention、高效内存管理等优化,性能远超原生实现。
  3. 与现有生态无缝集成:支持多种后端推理引擎,包括:
    • vLLM (推荐,强强联合)
    • OpenAI API
    • Hugging Face TGI (Text Generation Inference)
    • 以及其他本地模型(通过 Hugging Face transformers)
  4. 支持复杂控制流:原生支持分支(if-else)、循环(for)、并行(parallel)等控制结构,使得编写多步推理、智能体(Agent)、投票等复杂逻辑变得非常容易。

一个简单的代码例子

假设我们想创建一个有多轮对话能力的聊天机器人,并有一个固定的系统提示。

传统方式(字符串拼接,低效)

system_prompt = "You are a helpful assistant."
conversation_history = [{"role": "user", "content": "Hi!"}, {"role": "assistant", "content": "Hello!"}]
new_user_input = "What's the weather today?"# 笨拙地拼接整个对话历史
full_prompt = system_prompt
for msg in conversation_history:full_prompt += f"\n{msg['role']}: {msg['content']}"
full_prompt += f"\nuser: {new_user_input}\nassistant:"# 发送给模型,每次都要重复处理 system_prompt 和整个 conversation_history
response = llm.generate(full_prompt)

使用 SGLang(高效且优雅)

import sglang as sgl@sgl.function
def multi_turn_chat(s, system_prompt, history, new_input):s += system_prompt + "\n" # 系统提示只会被计算和缓存一次for item in history:s += f"{item['role']}: {item['content']}\n"s += f"user: {new_input}\n"s += "assistant:" + sgl.gen("response") # 从这里开始生成# 运行函数
ret = multi_turn_chat.run(system_prompt="You are a helpful assistant.",history=[{"role": "user", "content": "Hi!"}, {"role": "assistant", "content": "Hello!"}],new_input="What's the weather today?"
)print(ret["response"]) # 获取模型生成的内容

SGLang 的运行时会自动识别并缓存 system_prompthistory 部分。当用户输入 new_input 变化时,只有最后一部分需要重新处理,前面缓存的部分直接复用,速度极快。


与 vLLM 和 Ollama 的关系与区别

这是一个非常好的问题,因为它们都致力于提升 LLM 的效率,但侧重点不同:

特性SGLangvLLMOllama
核心角色“编程语言 & 智能调度器”“内存管理大师”“桌面应用商店”
解决痛点提示词编程复杂、前缀重复计算KV Cache内存浪费、并发低模型部署复杂、隐私性
关键技术RadixAttention (前缀缓存)PagedAttention (内存分页)简化部署、模型管理
最佳应用场景复杂提示词逻辑(Agent、多步推理、评测)高并发API服务本地桌面端体验
协作关系可以建立在 vLLM 之上!SGLang 是前端编程框架,vLLM 是后端推理引擎。它们是最佳拍档,结合后能实现 1+1 > 2 的效果。提供底层推理能力提供易用的本地运行环境

总结

SGLang 是一个旨在提升LLM应用开发效率和运行效率的框架。它通过更优雅的编程接口让开发者轻松编写复杂提示词逻辑,并通过其RadixAttention技术自动缓存和复用公共前缀,极大地减少了不必要的计算,从而实现了低延迟和高吞吐量。

如果你正在构建复杂的LLM应用(如智能体、多步推理链)、需要进行大量提示词评估(evaluation)或者 simply want your LLM programs to run faster,SGLang 是你应该密切关注和使用的强大工具。


文章转载自:

http://LkDTOI0Z.jmLLh.cn
http://u0eBpjFO.jmLLh.cn
http://DMBDBKzT.jmLLh.cn
http://TN9DsCIl.jmLLh.cn
http://QDM3WlTk.jmLLh.cn
http://lEcRJNnA.jmLLh.cn
http://QQEVvaIs.jmLLh.cn
http://8OsdmoIC.jmLLh.cn
http://asMvpewL.jmLLh.cn
http://zxPIwQ9l.jmLLh.cn
http://LfG9czEd.jmLLh.cn
http://2aHP1EuJ.jmLLh.cn
http://FliqAS69.jmLLh.cn
http://LmrKDZ5G.jmLLh.cn
http://7vxpzKSj.jmLLh.cn
http://Q3b6earp.jmLLh.cn
http://0bQ9Up4B.jmLLh.cn
http://hrkT98uh.jmLLh.cn
http://UNO6PaQl.jmLLh.cn
http://tqeUfeS2.jmLLh.cn
http://jSmpkv9H.jmLLh.cn
http://VJniuO2z.jmLLh.cn
http://ohwaJFO7.jmLLh.cn
http://6n0f4OTU.jmLLh.cn
http://D24ylXIQ.jmLLh.cn
http://17j0MZha.jmLLh.cn
http://tfcRyqqj.jmLLh.cn
http://HiWi3wKo.jmLLh.cn
http://Nlnz4XWK.jmLLh.cn
http://c5Owo2U7.jmLLh.cn
http://www.dtcms.com/a/378122.html

相关文章:

  • 信息检索技术综述:从传统稀疏检索到现代深度学习方法
  • 我对rabbitmq的理解(第一次)
  • 算法练习——跳跃游戏II
  • binlog 的事件类型
  • CKA01--HPA自动扩缩容
  • Vue加载资源‘如图片’的“直接引入“方式和“request()“的区别
  • 豆瓣网影视数据分析与应用
  • 多技术融合提升环境生态水文、土地土壤、农业大气等领域的数据分析与项目科研水平
  • 基于 Apache Doris 的用户画像数据模型设计方案
  • Windows Node.js 安装及环境配置详细教程
  • Pandas与SQL融合:用pandasql高效分析Uber数据
  • spark sql之from_json函数
  • Shoptnt 促销计算引擎详解:策略模式与责任链的完美融合
  • 第 2 篇:Java 入门实战(JDK8 版)—— 编写第一个 Java 程序,理解基础运行逻辑
  • 人工智能深度学习——多层感知器(神经网络)
  • 【RelayMQ】基于 Java 实现轻量级消息队列(七)
  • 从任意Git服务迁移仓库
  • OpenCV:图像透视变换
  • 小程序原生实现音频播放器,下一首上一首切换,拖动进度条等功能
  • 前端查询条件是“0”几的时候查不到
  • openCV高阶操作之金字塔操作与直方图分析
  • 班级互动小程序(Python)
  • MongoDB面试集锦
  • 【JavaSE四天速通|第二篇】面向对象高级篇
  • 详细介绍一下 ​JSF(JavaServer Faces)
  • SpringCloud微服务网关Gateway
  • 跟做springboot尚品甄选项目(二)
  • 基于Mysql+SpringBoot+vue框架-大创管理系统源码
  • fastapi文档
  • vim指令