SGL社区中推出一款轻量的推理框架:miniSGLang[1],支持完整的LLM推理。用约5千行Python代码和少量c++代码实现,麻雀虽小五脏俱全。相比SGLang上十万行的代码,miniSGLang简单易读,非常适合用于相关概念的理解。
本文结合<vLLM框架引导>[2]中提到的例子对miniSGLang稍作展开介绍。
1 框架结构
miniSGLang的框架可以展开成三层,在其说明文档[3]的架构图中分了两个部分,笔者在此基础上再打开Forward内容。如下图所示,后面分别介绍。
1.1
主要元素(顶层)
框架主要包括了4个关键元素,每个元素运行在不同的进程中。
1 前端服务(API Server): The entry point for users. It provides an OpenAI-compatible API (e.g., /v1/chat/completions) to receive prompts and return generated text.
2 文字转token(Tokenizer Worker): Converts input text into numbers (tokens) that the model can understand.
3 调度执行器(Scheduler Worker): The core worker process. In a multi-GPU setup, there is one Scheduler Worker for each GPU (referred to as a TP Rank). It manages the computation and resource allocation for that specific GPU.
4 Token转文字(Detokenizer Worker): Converts the numbers (tokens) generated by the model back into human-readable text.
数据计算流
步骤1:用户发送请求给API Server处理。如下图所示,OpenAI格式的curl。
步骤2: 在tokenizer中,将prompt转换成token_id。并把ids发给Scheduler 0(Rank 0)。
步骤3:Scheduler触发engine的forward计算过程,最后采样得到新的token Ids。如果是多GPU模式,Scheduler 0(Rank 0)会将请求广播到其他Scheduler(Rank 1~N),forward完成后再将数据收集回来。
步骤4:接收到Scheduler(Rank 0)发送过来的ids后,Detokenizer将其转换成文字。
最后,AI Server将结果流式输出,呈现给用户。
1.2
调度引擎
顶层中的Scheduler模块展开后,其内部主要有三部分:
- 调度器(sceduler):为请求任务分配计算资源和存储资源并下发任务,同时协调engine与kv cache模块工作。
- 引擎(engine):完成forward计算。负责管理模型、上下文、物理KV缓存、注意力backend以及CUDA图。多个GPU模式下,每个TP worker运行一个engine实例。
- KV cache模块:基于radix cache原理管理KV cache,承载功能的两个类:KVCache pool、KVCache manager。其中KVCache pool是一个统一的cache池,所有请求的KV cache都要从中申请。
Scheduler应用的关键技术:
1、分块预填充(Chunked Prefill)[4]:将大的prefill请求分块成更小的块(切分序列)执行,降低峰值显存。
Chunked Prefill示意图
2、掩盖调度(Overlap Scheduling)[5]:为了降低CPU的调度开销,让CPU侧调度与GPU侧运算进行掩盖。
KV cache管理应用的关键技术:Radix Cache[6]
Radix Cache是SGLang设计之初的一个关键技术,通过高效地利用KV cache的历史数据,降低重复计算,具体原理参看论文 [7]。
1.3
前向运算
前向运算位于engine内部,包括模型的前向运算(Attention、FFN等)和采样(sampling)过程。
Attention运算模块有三个关键要素:
- QKV数据。其中KV值由KV cache Pool中的历史数据、以及新计算的KV值组成。
- 计算后端(Backend)。后端根据用户要求执行特定的注意力算子,目前支持flash attention3和flash infer两种。
- 元数据(Metadata)。元数据中包括page table、positions等内容,让attention算子能正确地读取相关请求的QKV数据。
Sampler采样器目前仅支持温度调节,其它方法如TopK/TopP/Penalty等暂不支持,原理参考[8]。
**Forward中应用的关键技术:CUDA Graph[**9]
通过CUDA Graph的捕获与重放(capturing and replaying),能够降低decode阶段的CPU下发开销。调用在GraphRunner(/python/minisgl/engine/graph.py)中。
2 代码结构与使用
2.1
代码的模块组织结构
除了第1节中提到关键模块,还有比较重要的部分:
- minisgl.distributed: 实现分布式的函数,如用于TP并行的all-reduce、all-gather操作。
- minisgl.llm: 一个统一的python接口,能够用于offline模式。
- minisgl.kernel: 执行自定义的CUDA kernels。
- minisgl.benchmark: 提供了一些测试方法,测试模型性能。
其中LLM模块的offline方式示例如下:
import time from random import randint, seed from minisgl.core import SamplingParams from minisgl.llm import LLM def main(): seed(0) num_seqs = 256 max_input_len = 1024 max_output_len = 1024 # align the hyperparameters llm = LLM( "Qwen/Qwen3-0.6B", max_seq_len_override=4096, max_extend_tokens=16384, cuda_graph_max_bs=256 ) prompt_token_ids = [ [randint(0, 10000) for _ in range(randint(100, max_input_len))] for _ in range(num_seqs) ] sampling_params = [ SamplingParams(temperature=0.6, ignore_eos=True, max_tokens=randint(100, max_output_len)) for _ in range(num_seqs) ] llm.generate(["Benchmark: "], SamplingParams()) t = time.time() llm.generate(prompt_token_ids, sampling_params) t = time.time() - t total_tokens = sum(sp.max_tokens for sp in sampling_params) throughput = total_tokens / t print(f"Total: {total_tokens}tok, Time: {t:.2f}s, Throughput: {throughput:.2f}tok/s") main()2.2
安装与使用
在代码库的readme[10]中,提供了安装方式、两种使用方式:API请求调用,Shell互动。如果要debug代码,考虑用2.1的offline模式。
# 环境准备:ABAP # Create a virtual environment (Python 3.10+ recommended) uv venv --python=3.12 source .venv/bin/activate # 安装包: git clone https://github.com/sgl-project/mini-sglang.git cd mini-sglang && uv venv --python=3.12 && source .venv/bin/activate uv pip install -e . # 使用方式1(OpenAI-compatible API): # Deploy Qwen/Qwen3-0.6B on a single GPU python -m minisgl --model "Qwen/Qwen3-0.6B" # Deploy meta-llama/Llama-3.1-70B-Instruct on 4 GPUs with Tensor Parallelism, on port 30000 python -m minisgl --model "meta-llama/Llama-3.1-70B-Instruct" --tp 4 --port 30000 # 使用方式2(Interactive Shell): python -m minisgl --model "Qwen/Qwen3-0.6B" --shell测试效果
在官方公开数据中提供了mini-SGLang 与nano-vLLM的对比数据,以及与全量版SGLang的对比测试。笔者认为与nano-vLLM对比的意义不大,毕竟都是裁剪版,谁后发布谁更有优势。所以单看mini-SGLang与SGLang的对比:
测试条件:
- Hardware: 4xH200 GPU, connected by NVLink.
- Model: Qwen3-32B
- Dataset: Qwen trace[11], replaying first 1000 requests.
指标:TTFT(Time To First Token):首token生成的时间,用于衡量prefill性能的指标。TBT(Time Between Tokens): 生成token之间的时间差,衡量decode性能(具体解释参看 [12])。
单从测试结果来看,mini-SGLang在该条件下效果与SGLang相当。
总结:mini-SGLang作为SGLang的裁剪版,仅实现了一些关键的模块,结构简单清晰,能够帮助初学者快速了解其相关概念,降低了框架学习的入门难度。因为mini-SGLang许多特性暂未实现,若要进一步学习SGLang,还是要回归全量版本[13]。
在大模型时代,我们如何有效的去学习大模型?
现如今大模型岗位需求越来越大,但是相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。
掌握大模型技术你还能拥有更多可能性:
• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;
• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;
• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;
• 更优质的项目可以为未来创新创业提供基石。
一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
一、AGI大模型系统学习路线
很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,下面是我整理好的一套完整的学习路线,希望能够帮助到你们学习AI大模型。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF书籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型各大场景实战案例
结语
【一一AGI大模型学习 所有资源获取处(无偿领取)一一】
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~