解锁开源模型高性能服务:SGLang Runtime 应用场景与实践

简介: SGLang 是一个用于大型语言模型和视觉语言模型的推理框架。

引言

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。

1 x A100 (bf16) 上的 Llama-8B

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

image.png

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

image.png

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

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

image.png

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

image.png

魔搭最佳实践

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

环境安装

pip install --upgrade pip
pip install "sglang[all]"
# Install FlashInfer CUDA kernels
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
# Update transformers for Llama3.1
# pip install --upgrade transformers

模型下载

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

使用ModelScope CLI完成模型下载

modelscope download --model=qwen/Qwen2-7B-Instruct --local_dir ./Qwen2-7B-Instruct

模型部署

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

python -m sglang.launch_server --model-path /mnt/workspace/Qwen2-7B-Instruct --port 30000 --dtype bfloat16  --disable-cuda-graph --context-length 512

请求调用

curl

curl http://localhost:30000/generate \
  -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")
# Chat completion
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做了性能评估,首先敲重点:

  • SGLang适用场景
  • 框架整体性能,尤其是sampler性能,相比模型执行性能更加具有显著优势
  • 适用场景:小模型
  • 适用场景:大batch(尤其是MoE模型)
  • 主要性能差距:
  • 采样器(sampler):greedy 约10倍差距,sampled 约20倍差距
  • 调度:SGLang Runtime增量式维护model inputs data structures,使得模型调度开销更小,同时支持num_continue_decode_steps来实现调度一次,运行k步decode,进一步减小框架额外开销。

image.png

  • 注意事项
  • 可能出于性能考虑,SGLang现在的版本不支持presence_penalty,presence_penalty用于用户控制模型生成时整个序列中的重复度。

Qwen2-7B-Instruct,H800 x 1

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

整体性能

prefill

decode

性能评估

SGLang runtime 显著优于vLLM

接近

SGLang runtime 性能比vLLM高一倍

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

Mean TTFT

P99 TTFT

Mean TPOT

P99 TPOT

Thorughput( requests/s)

Thorughput( tokens/s)

SGLang Runtime

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,H800 x 4

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

整体性能

prefill

decode

性能评估

SGLang runtime 比vLLM高10%

vLLM比SGLang runtime高约30%

SGLang runtime 性能比vLLM高约20%

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

Mean TTFT

P99 TTFT

Mean TPOT

P99 TPOT

Thorughput( requests/s)

Thorughput( tokens/s)

SGLang Runtime

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)

相关文章
|
8月前
|
人工智能 自然语言处理 搜索推荐
AI原生企业级Agent构建平台具备哪些特性?一篇文章看明白
AI原生企业级Agent构建平台有哪些特性?澜码正式发布AskXBOT平台为业界揭晓答案。
521 0
|
12天前
|
机器学习/深度学习 存储 人工智能
MNN:阿里开源的轻量级深度学习推理框架,支持在移动端等多种终端上运行,兼容主流的模型格式
MNN 是阿里巴巴开源的轻量级深度学习推理框架,支持多种设备和主流模型格式,具备高性能和易用性,适用于移动端、服务器和嵌入式设备。
68 18
MNN:阿里开源的轻量级深度学习推理框架,支持在移动端等多种终端上运行,兼容主流的模型格式
|
2月前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
154 4
|
2月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
49 4
|
2月前
|
缓存 监控 前端开发
在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统
本文深入探讨了在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统。
134 1
|
2月前
|
存储 安全 Go
Go 语言以其高效的并发编程能力著称,主要依赖于 goroutines 和 channels 两大核心机制
Go 语言以其高效的并发编程能力著称,主要依赖于 goroutines 和 channels 两大核心机制。本文介绍了这两者的概念、用法及如何结合使用,实现任务的高效并发执行与数据的安全传递,强调了并发编程中的注意事项,旨在帮助开发者更好地掌握 Go 语言的并发编程技巧。
37 2
|
2月前
|
自然语言处理 运维 开发工具
深入探讨了 NeoVim 相较于传统 Vim 的优势,包括更好的扩展性、现代化的界面和用户体验、多语言编程支持、强大的异步处理能力、更好的协作支持、持续的更新和改进、活跃的社区以及与现代开发工具的集成
本文深入探讨了 NeoVim 相较于传统 Vim 的优势,包括更好的扩展性、现代化的界面和用户体验、多语言编程支持、强大的异步处理能力、更好的协作支持、持续的更新和改进、活跃的社区以及与现代开发工具的集成。通过命令对比,展示了两者在启动、配置、模式切换、移动编辑、搜索替换、插件管理、文件操作、窗口缓冲区管理和高级功能等方面的差异。总结部分强调了 NeoVim 在多个方面的显著优势,解释了为什么越来越多的运维人员选择 NeoVim。
99 3
|
5月前
|
Prometheus 监控 Cloud Native
|
5月前
|
机器学习/深度学习 存储 缓存
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
|
6月前
|
人工智能 前端开发 Devops
NET技术在现代开发中的影响力日益增强,本文聚焦其核心价值,如多语言支持、强大的Visual Studio工具、丰富的类库和跨平台能力。
【7月更文挑战第4天】**.NET技术在现代开发中的影响力日益增强,本文聚焦其核心价值,如多语言支持、强大的Visual Studio工具、丰富的类库和跨平台能力。实际应用涵盖企业系统、Web、移动和游戏开发,以及云服务。面对性能挑战、容器化、AI集成及跨平台竞争,.NET持续创新,开发者应关注技术趋势,提升技能,并参与社区,共同推进技术发展。**
53 1