Posted in

解锁开源模型高性能服务:SGLang Runtime 应用场景与实践_AI阅读总结 — 包阅AI

包阅导读总结

1. 关键词:SGLang Runtime、开源模型、性能服务、推理框架、测试benchmark

2. 总结:

SGLang 是用于大型语言模型和视觉语言模型的推理框架,基于并增强多个开源服务引擎的设计,引入多种创新技术,具有高效的批处理调度程序。近期发布的 benchmark 显示其在多种测试场景中性能出色,文中还介绍了安装、部署及性能评估等内容。

3. 主要内容:

– SGLang

– 是用于大型语言模型和视觉语言模型的推理框架

– 基于并增强多个开源 LLM 服务引擎的优秀设计

– 利用 FlashInfer 注意力性能 CUDA 内核,集成 torch.compile ,引入创新技术

– 高效的批处理调度程序用 Python 实现,扩展性良好

– 性能测试

– 在 A100 GPU 上多场景中性能优于 vLLM,如 Llama-70B 上吞吐量高达 3.1 倍

– 给出不同模型和硬件配置下的性能对比数据

– 安装与部署

– 在魔搭免费 Notebook 环境中安装

– 下载模型

– 使用 SGLang Runtime 完成模型高效 serving

– 性能评估

– 针对不同模型和硬件配置,与 vLLM 进行性能对比,分析主要性能差异在于 Sampler

思维导图:

文章地址:https://mp.weixin.qq.com/s/kDOpaVSECJ8NyapSPKpQIA

文章来源:mp.weixin.qq.com

作者:何涛

发布时间:2024/7/30 10:35

语言:中文

总字数:1753字

预计阅读时间:8分钟

评分:91分

标签:SGLang,大型语言模型,高性能服务,开源框架,GPU优化


以下为原文内容

本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com

SGLang 是一个用于大型语言模型和视觉语言模型的推理框架。基于并增强了多个开源 LLM 服务引擎(包括LightLLM、vLLM和Guidance )的许多优秀设计。SGLang 利用了FlashInfer注意力性能 CUDA 内核,并集成了受gpt-fast启发的 torch.compile 。


此外,SGLang 还引入了RadixAttention等创新技术,用于自动 KV 缓存重用和压缩状态机,用于快速约束解码。SGLang 以其高效的批处理调度程序而闻名,该调度程序完全用 Python 实现。SGLang 高效的基于 Python 的批处理调度程序具有良好的扩展性,通常可以匹敌甚至超越用 C++构建的闭源实现。


项目开源地址:https://github.com/sgl-project/sglang


近期,SGLang发布的benchmark显示,在A100 GPU上的许多测试场景中,SGLang性能优于 vLLM,在 Llama-70B 上的吞吐量高达 3.1 倍。如下为SGLang 官方提供的部分测试benchmark。



1xA100(bf16)上的Llama-8B

从小模型 Llama-8B 开始,下图展示了每个引擎在离线设置下在六个不同数据集上可以实现的最大输出吞吐量。TensorRT-LLM 和 SGLang 都可以在输入较短的数据集上实现高达每秒 5000个 token 的出色吞吐量。


下面的在线benchmark图显示了与离线情况类似的趋势。SGLang 表现出色。


8卡A100(bf16)上的Llama-70B

转向在 8 个 GPU 上具有张量并行性的更大的 Llama-70B 模型,趋势与 8B 的情况类似。在下面的离线基准测试中,TensorRT-LLM 和 SGLang 都可以扩展到高吞吐量。


在下面的在线图中,TensorRT-LLM 得益于其高效的内核实现和运行时,表现出了出色的延迟性能。

在魔搭的免费Notebook环境(22G显存)中使用SGLang+Qwen2-7B-Instruct


环境安装

pip install pip install "sglang[all]"wget "https://modelscope.oss-cn-beijing.aliyuncs.com/resource/flashinfer-0.1.2%2Bcu121torch2.3-cp310-cp310-linux_x86_64.whl"pip install flashinfer-0.1.2+cu121torch2.3-cp310-cp310-linux_x86_64.whl


模型下载

模型链接:https://modelscope.cn/models/qwen/Qwen2-7B-Instruct

使用ModelScopeCLI完成模型下载

modelscopedownload--model=qwen/Qwen2-7B-Instruct--local_dir./Qwen2-7B-Instruct

模型部署

使用The SGLang Runtime (SRT)完成模型高效serving,注意,本文为了让模型可以在消费级显卡(22G显存)上运行,使用了–disable-cuda-graph参数,会损失一部分推理性能。

python-msglang.launch_server--model-path/mnt/workspace/Qwen2-7B-Instruct--port30000--dtypebfloat16--disable-cuda-graph--context-length512

请求调用

curl

curl http:  -H "Content-Type: application/json" \  -d '{    "text": "Once upon a time,",    "sampling_params": {      "max_new_tokens": 16,      "temperature": 0    }}'

支持OpenAI格式的API调用

python

import openaiclient = openai.Client(    base_url="http://127.0.0.1:30000/v1", api_key="EMPTY")
response = client.chat.completions.create( model="default", messages=[ {"role": "system", "content": "You are a helpful AI assistant"}, {"role": "user", "content": "以杭州的春天为题,写一篇100字的短文"}, ], temperature=0, max_tokens=150,)print(response)


我们也针对vLLM和SGLang做了性能评估,首先敲重点:

Qwen2-7B-Instruct,H800x1

在我们有限的具体测试场景上,性能对比如下:

整体性能

prefill

decode

性能评估

SGLangruntime显著优于vLLM

接近

SGLangruntime性能比vLLM高一倍


针对batch size 128 + cudagraph + temperature=1.0的场景,具体性能如下:

MeanTTFT

P99TTFT

MeanTPOT

P99TPOT

Thorughput(requests/s)

Thorughput(tokens/s)

SGLangRuntime

20.31

111.82

12.95

14.59

24.57

19109.23

vLLM

21.37

119.69

27.03

134.54

15.71

12220.8

主要的性能差异在于Sampler:sampler部分性能差10倍(greedy)/ 20倍(sampled)


Qwen2-72B-Instruct,H800x4

在我们有限的具体测试场景上,性能对比如下:

整体性能

prefill

decode

性能评估

SGLangruntime比vLLM高10%

vLLM比SGLangruntime高约30%

SGLangruntime性能比vLLM高约20%


针对batch size 128 + enforce eager + temperature=1.0的场景,具体性能如下:

MeanTTFT

P99TTFT

MeanTPOT

P99TPOT

Thorughput(requests/s)

Thorughput(tokens/s)

SGLangRuntime

75.18

398.23

51.97

173.62

6.4

4978.43

vLLM

97.51

528.64

40.83

51.22

6.2

4764.47


主要的性能差异在于Sampler:sampler部分性能差10倍(greedy)/ 20倍(sampled)


点击阅读原文,跳转模型链接~