包阅导读总结
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 openai
client = 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)
点击阅读原文,跳转模型链接~