解锁开源模型高性能服务: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)

相关文章
|
5月前
|
数据库 Android开发 开发者
构建高性能微服务架构:从理论到实践构建高效Android应用:探究Kotlin协程的优势
【2月更文挑战第16天】 在当今快速迭代和竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性和独立部署能力而受到企业的青睐。本文将深入探讨如何构建一个高性能的微服务系统,涵盖从理论基础到具体实现的各个方面。我们将重点讨论服务拆分策略、通信机制、数据一致性以及性能优化等关键主题,为读者提供一个清晰、实用的指南,以便在复杂多变的业务环境中构建和维护健壮的微服务体系结构。 【2月更文挑战第16天】 在移动开发领域,性能优化和流畅的用户体验是至关重要的。随着技术的不断进步,Kotlin作为一种现代编程语言,在Android开发中被广泛采用,尤其是其协程特性为异步编程带来了革命性的改进。本文旨在深入
|
5月前
|
存储 监控 Java
【深度挖掘Java性能调优】「底层技术原理体系」深入探索Java服务器性能监控Metrics框架的实现原理分析(Counter篇)
【深度挖掘Java性能调优】「底层技术原理体系」深入探索Java服务器性能监控Metrics框架的实现原理分析(Counter篇)
150 0
|
5月前
|
人工智能 自然语言处理 搜索推荐
AI原生企业级Agent构建平台具备哪些特性?一篇文章看明白
AI原生企业级Agent构建平台有哪些特性?澜码正式发布AskXBOT平台为业界揭晓答案。
457 0
|
2月前
|
缓存 开发者 测试技术
跨平台应用开发必备秘籍:运用 Uno Platform 打造高性能与优雅设计兼备的多平台应用,全面解析从代码共享到最佳实践的每一个细节
【8月更文挑战第31天】Uno Platform 是一种强大的工具,允许开发者使用 C# 和 XAML 构建跨平台应用。本文探讨了 Uno Platform 中实现跨平台应用的最佳实践,包括代码共享、平台特定功能、性能优化及测试等方面。通过共享代码、采用 MVVM 模式、使用条件编译指令以及优化性能,开发者可以高效构建高质量应用。Uno Platform 支持多种测试方法,确保应用在各平台上的稳定性和可靠性。这使得 Uno Platform 成为个人项目和企业应用的理想选择。
48 0
|
2月前
|
机器学习/深度学习 存储 缓存
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
|
3月前
|
自然语言处理 Go 数据处理
云计算自旋锁问题之引入Golang插件系统后iLogtail的输入输出通道和处理能力如何解决
云计算自旋锁问题之引入Golang插件系统后iLogtail的输入输出通道和处理能力如何解决
35 1
|
5月前
|
人工智能 监控 开发者
阿里云PAI发布DeepRec Extension,打造稳定高效的分布式训练,并宣布开源!
阿里云人工智能平台PAI正式发布自研的 DeepRec Extension(即 DeepRec 扩展),旨在以更低成本,更高效率进行稀疏模型的分布式训练。
|
5月前
|
机器学习/深度学习 搜索推荐 算法
直接调用通用大模型开发应用与基于开源大模型“自研”两种方式比较
【1月更文挑战第23天】直接调用通用大模型开发应用与基于开源大模型“自研”两种方式比较
195 1
直接调用通用大模型开发应用与基于开源大模型“自研”两种方式比较
|
小程序 JavaScript 前端开发
4大主流小程序平台介绍及其优缺点对比
小程序是一种轻量级应用程序,能够在手机上直接运行,无需下载安装,适用于一些简单的功能场景,如点餐、预约、查看天气等。以下是目前主流的小程序平台及其优缺点对比
1428 0
|
关系型数据库 分布式数据库 数据库
高性能特性体验:ePQ 的详解与实战
PolarDB PostgreSQL 引擎提供了弹性跨机并行查询(elastic Parallel Execution)的功能,支持多个计算节点分布式地执行 SQL 查询。本实验将体验该功能。
961 0