伯克利新AI推理引擎,出手即王炸,吊打TRT-LLM、vLLM!贾扬清点赞
原创 尹小军 AGI Hunt 2024年07月26日 12:18 北京
伯克利又出神作了!
还记得去年刷爆朋友圈的sglang吗?这回它又双叒叕升级了!他们新发布的SGLang Runtime v0.2,直接把GPU榨干了!
那么问题来了,这个sglang到底是个啥?
简单来说,sglang是一个AI推理引擎,是一个专门为大语言模型和视觉语言模型设计的高效服务框架。
就像F1赛车需要顶级发动机一样,大语言模型也需要高效的推理引擎来发挥潜力。
而sglang正是这样一个性能怪兽。
根据LMSys组织的官方公告,最新的sglang Runtime v0.2版本简直就是AI界的"闪电侠":
比TensorRT-LLM快2.1倍
比vLLM快3.8倍
支持从Llama-8B到405B的超大模型
兼容A100/H100显卡
支持FP8/BF16精度
有网友调侃道:
这性能提升也太夸张了吧?英伟达工程师看了估计想找个地缝钻进去。
更让人惊讶的是,sglang完全是开源的,而且是用Python实现的。
要知道,像TensorRT-LLM这样的商业推理引擎,可是有英伟达这样的大公司在后面砸钱。
而sglang却能在短短几个月内实现如此惊人的性能提升,不得不说是开源界的一个"奇迹"。
具体说来,比TensorRT-LLM快2.1倍,比vLLM快3.8倍!而且从8B到405B的大模型,从A100到H100的显卡,全都能吊打!
看到这个结果,连前贾扬清都坐不住了,发文感叹伯克利的持续创新:
我一直被伯克利这个PhD"母舰"惊艳到,它不断在AI和系统协同设计方面取得最先进的成果。我们已经看到sglang过去一年的使用情况,现在它变得更好了。迫不及待想在产品中部署和尝试新的sglang!
这是真的牛!
看跑分,不管是离线还是在线,SGLang都是吊打其他框架。
而且最牛的是,它全是用纯Python写的!整个核心调度器才4000多行代码!
这下子,那些用C++写的闭源框架怕是要尴尬了。
不过话说回来,为啥要搞这么个东西呢?
原来是伯克利的LMSYS团队在运营Chatbot Arena平台时发现,现有的一些框架要么难用、要么难改、要么性能拉跨。
于是他们决定,干脆自己上手撸一个!
尤其是在H100上跑70B模型时,SGLang简直不讲道理啊!
其他框架要么内存不够,要么需要大量手动调优,要么就是各种开销太大。
而SGLang呢?轻轻松松就把吞吐量拉满了!
不过怎么说呢,听着像是顺手搞一下而已,这是高调还是低调呢。。。
项目成员zhyncs(@zhyncs42) 表示很荣幸能参与其中:
非常荣幸能参与其中。快来试试吧!
确实,这种开源项目能参与进去,那绝对是一件值得吹嘘的事情!
不过也有网友提出了疑问:
/@gazorp5 问道:
你们在介绍中提到了TGI,但为什么没有与之比较呢?
当然,还有更务实的网友,直接问到了硬件支持:
haha303(@haha3035) 询问:
这个支持AMD的#rocm和#mi300x吗?
这是个好问题!毕竟也有不少人都在用AMD的显卡跑AI。如果SGLang能支持AMD的硬件,那可就更牛了!
不过话说回来,SGLang的强大之处不仅仅在于性能。
它还开源、易用、易改。这就意味着,你可以根据自己的需求,很方便地对它进行定制。
而在Llama 3.1 的405B模型上的表现,SGLang 更是完全不虚,直接吊打TensorRT-LLM和vLLM啊!
而且,SGLang还整合了很多牛逼的技术,比如FlashInfer的高性能注意力CUDA内核,gpt-fast的torch.compile等等。
有网友看到这些特性后,直接兴奋了:
Mia Braun(@MiaAI_Builder) 表示很期待:
恭喜v0.2发布!SGLang Runtime令人印象深刻的吞吐量优化让我对高效服务引擎的未来感到兴奋。
确实,看到这么强大的开源项目,谁能不兴奋呢?
最后,SGLang团队还表示,他们未来还会添加更多新功能,比如长上下文和MoE优化等。
看来,AI框架的战场又要热闹起来了!
那么问题来了,你觉得SGLang能干掉NVIDIA的TensorRT-LLM吗?
欢迎在评论区讨论!
相关链接
[1] https://x.com/lmsysorg/status/1816515251745214853
[2] https://lmsys.org/blog/2024-07-25-sglang-llama3/
[3] https://github.com/sgl-project/sglang
LMSYS.org 博客原文???
利用SGLang Runtime实现更快速的开源Llama3服务
在LMSYS.org,我们已经运营Chatbot Arena[1]平台超过一年,服务了数百万用户。我们深知高效服务对于AI产品和研究的重要性。通过我们的运营经验和深入研究,我们不断改进底层服务系统,从高层次的多模型服务框架FastChat[2]到高效的服务引擎SGLang Runtime (SRT)[3]。
本文重点介绍SGLang Runtime,这是一种通用的LLM和VLM服务引擎。虽然现有的选择如TensorRT-LLM、vLLM、MLC-LLM和Hugging Face TGI各有优点,但我们发现它们有时难以使用、难以定制或性能不足。这促使我们开发了SGLang v0.2,旨在创建一个不仅用户友好且易于修改,同时还能提供顶级性能的服务引擎。尽管SGLang包括前端语言功能,本文将仅关注后端运行时,并将“SGLang”和“SGLang Runtime”交替使用以指代该运行时。
与TensorRT-LLM和vLLM相比,SGLang Runtime在在线和离线场景中始终提供更优或竞争性的性能,处理从Llama-8B到Llama-405B的模型,并在A100和H100 GPU上使用FP8和FP16。SGLang始终优于vLLM,在Llama-70B上实现了高达3.8倍的吞吐量;它也常常匹配或超过TensorRT-LLM,在Llama-405B上实现了高达2.1倍的吞吐量。 更重要的是,SGLang是完全开源的,使用纯Python编写,核心调度器代码不到4000行。
SGLang是一个Apache 2.0许可证下的开源项目。它已被LMSYS Chatbot Arena用于支持部分模型、Databricks、几家初创公司和研究机构,生成了数万亿个token并实现了更快的迭代。随着其逐步从研究原型成熟起来,我们邀请社区与我们一起创建下一代高效引擎。
基准测试设置
我们在离线和在线使用案例中进行了基准测试:
离线: 我们一次发送2K到3K个请求,测量输出吞吐量(tokens/second),定义为输出tokens数量除以总时长。我们测试了从ShareGPT数据集派生的合成数据集。例如,I-512-O-1024表示平均输入为512个tokens,平均输出为1024个tokens的数据集。测试的五个数据集是:数据集1:I-243-O-770,数据集2:I-295-O-770,数据集3:I-243-O-386,数据集4:I-295-O-386,数据集5:I-221-O-201。
在线: 我们以每秒1到16个请求的速率发送请求,测量中位端到端延迟。我们使用合成数据集I-292-O-579。
我们使用默认参数的vLLM 0.5.2和推荐参数及调优批量大小的TensorRT-LLM。所有引擎都关闭了前缀缓存。目的是基准测试基础性能而不添加任何附加功能,如推测解码或缓存。我们使用OpenAI兼容API基准测试SGLang和vLLM,使用Triton接口基准测试TensorRT-LLM。
更多详细信息和可复现脚本见附录A。对于每个模型,我们将先展示离线结果,再展示在线结果。
Llama-8B在1 x A100(bf16)上的表现
从小模型Llama-8B开始,下图显示了各引擎在离线设置中在五个不同数据集上的最大输出吞吐量。TensorRT-LLM和SGLang均能达到约4000 tokens每秒的吞吐量,而vLLM则落后。
图片1
在线基准测试图显示了与离线情况类似的趋势。TensorRT-LLM和SGLang表现同样出色,能维持RPS > 10,而vLLM的延迟在高请求率下显著增加。
图片2
Llama-70B在8 x A100(bf16)上的表现
转向更大的Llama-70B模型,并在8个GPU上进行张量并行,趋势与8B情况类似。下图为离线基准测试,显示了TensorRT-LLM和SGLang均能扩展到高吞吐量。
图片3
在线基准测试图显示了TensorRT-LLM由于其高效的内核实现和运行时表现出色的延迟性能。
图片4
Llama-70B在8 x H100(fp8)上的表现
接下来测试FP8性能。vLLM和SGLang均使用来自CUTLASS的FP8内核。在离线设置中,SGLang的批量调度器非常高效,能够继续扩展吞吐量达到最大批量大小,实现最高吞吐量。其他系统由于OOM、缺乏广泛的手动调优或其他开销无法扩展其吞吐量或批量大小。在线情况也类似,SGLang和TensorRT都能实现相似的中位延迟。
图片5
图片6
Llama-405B在8 x H100(fp8)上的表现
最后,我们基准测试了最大405B模型的性能。由于模型很大,大部分时间都花在GPU内核上。不同框架之间的差距缩小。TensorRT-LLM表现欠佳可能是由于405B模型刚刚发布,而我们使用的版本尚未集成一些最新优化。在在线和离线情况下,SGLang表现最佳。
图片7
图片8
SGLang概述
SGLang是一种大语言模型和视觉语言模型的服务框架。它基于并改进了多个开源LLM服务引擎的优秀设计,包括LightLLM[4]、vLLM[5]和Guidance[6]。它利用了FlashInfer[7]的高性能注意力CUDA内核,并集成了受gpt-fast[8]启发的torch.compile。
此外,我们还引入了如RadixAttention[9]自动KV缓存重用和压缩状态机[10]用于快速受限解码等创新。SGLang以其高效的批量调度器[11]而著称,完全用Python实现。为了进行公平的对比,本文在不启用特定场景或工作负载优化(如前缀缓存和推测解码)的情况下测试这些服务引擎的基础性能。SGLang的加速是通过合理的工程实现的。SGLang高效的Python批量调度器扩展性良好,通常能够匹敌甚至超越用C++构建的闭源实现。
表1比较了SGLang、TensorRT-LLM和vLLM的各个方面。在性能方面,SGLang和TensorRT-LLM都表现优异。在可用性和可定制性方面,SGLang的轻量级和模块化核心使其易于定制,而TensorRT-LLM的复杂C++技术栈和设置说明使其难以使用和修改。SGLang的源代码是完全开源的,而TensorRT-LLM则是部分开源。相比之下,vLLM由于CPU调度开销较大而表现不佳。
表1 比较
SGLang | TensorRT-LLM | vLLM | |
---|---|---|---|
性能 | 优异 | 优异 | 一般 |
可用性 | 良好 | 较差 | 良好 |
可定制性 | 高 | 低 | 中 |
源代码开放性 | 完全开源 | 部分开源 | 完全开源 |
编程语言 | Python | C++ | Python |
下一步
我们很高兴分享最新的基准测试结果。尽管仍有许多工作要做,但这表明我们开发一个简单、可定制和高性能服务引擎的理念是可行的。敬请期待新的功能,如长上下文和MoE优化,以及详细的技术演练。加入我们,在https://github.com/sgl-project/sglang[12]共同构建下一代服务引擎。
尝试Llama服务
您可以按照以下步骤轻松服务Llama模型。
使用pip、源码或Docker 安装[13] SGLang。
启动服务器:
# Llama 8Bpython -m sglang.launch_server --model-path meta-llama/Meta-Llama-3.1-8B-Instruct# Llama 405Bpython -m sglang.launch_server --model-path meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tp 8
使用OpenAI兼容API发送请求:
curl http://localhost:30000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "default", "prompt": "Say this is a test", "max_tokens": 7, "temperature": 0 }'
运行基准测试:
python3 -m sglang.bench_serving --backend sglang --num-prompts 1000
团队
本文由梁胜尹、尹能张、应盛和超过65位开源贡献者[14]共同撰写。感谢Databricks的支持,应盛的工作在Databricks完成。特别感谢郑良敏、叶子豪和何浩天的技术支持,马特·扎哈里亚的有益建议,以及余科迪的反馈。
附录A:详细基准测试设置
再现基准测试的指令见sglang/benchmark/blog_v0_2[15]。
对于所有基准测试,我们设置了ignore_eos
或min_length/end_id
以确保每个引擎输出相同数量的tokens。我们尝试使用vLLM 0.5.3.post1,但其在高负载下经常崩溃,部分基准测试结果显示其性能与vLLM 0.5.2相似或更差。因此,我们报告的是vLLM 0.5.2的结果。虽然我们意识到不同的服务器配置会显著影响服务性能,但我们主要使用每个引擎的默认参数来模拟普通用户的情况。
对于8B和70B模型,我们使用meta-llama/Meta-Llama-3-8B-Instruct[16]和meta-llama/Meta-Llama-3-70B-Instruct[17] bf16检查点,以及neuralmagic/Meta-Llama-3-70B-Instruct-FP8[18] fp8检查点。对于405B模型,我们在所有基准测试中使用了虚拟权重。由于TensorRT-LLM最新图像r24.06不支持官方meta-llama/Meta-Llama-3.1-405B-FP8[19]检查点中的fbgemm_fp8量化,我们在所有框架中使用每层fp8量化,并量化所有层,除了lm_head。我们认为这为所有引擎提供了公平的比较。A100和H100 GPU为80GB SXM版本。
参考链接
[1]
Chatbot Arena: https://chat.lmsys.org/
[2]
FastChat: https://github.com/lm-sys/FastChat/tree/main
[3]
SGLang Runtime (SRT): https://github.com/sgl-project/sglang/tree/main
[4]
LightLLM: https://github.com/ModelTC/lightllm
[5]
vLLM: https://blog.vllm.ai/2023/06/20/vllm.html
[6]
Guidance: https://github.com/guidance-ai/guidance
[7]
FlashInfer: https://flashinfer.ai/2024/02/02/introduce-flashinfer.html
[8]
gpt-fast: https://pytorch.org/blog/accelerating-generative-ai-2/
[9]
RadixAttention: https://arxiv.org/abs/2312.07104
[10]
压缩状态机: https://lmsys.org/blog/2024-02-05-compressed-fsm/
[11]
批量调度器: https://github.com/sgl-project/sglang/tree/main/python/sglang/srt/managers
[12]
https://github.com/sgl-project/sglang: https://github.com/sgl-project/sglang
[13]
安装: https://github.com/sgl-project/sglang/tree/main?tab=readme-ov-file#install
[14]
开源贡献者: https://github.com/sgl-project/sglang/graphs/contributors
[15]
sglang/benchmark/blog_v0_2: https://github.com/sgl-project/sglang/tree/main/benchmark/blog_v0_2
[16]
meta-llama/Meta-Llama-3-8B-Instruct: https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct
[17]
meta-llama/Meta-Llama-3-70B-Instruct: http://meta-llama/Meta-Llama-3-70B-Instruct
[18]
neuralmagic/Meta-Llama-3-70B-Instruct-FP8: https://huggingface.co/neuralmagic/Meta-Llama-3-70B-Instruct-FP8
[19]
meta-llama/Meta-Llama-3.1-405B-FP8: https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-FP8