文章目录
背景
公司需要新增了 GPU 机器自部署大模型服务用于支撑 AI 业务。目前市场上存在多种推理引擎,既有由大型科技公司如 Nvidia 和微软开发的成熟产品,也有新兴的开源项目。这些引擎在推理性能、优化支持、易用性等方面各有优势和特点,选择合适的推理引擎需要综合考虑这些因素,以确保模型在实际部署中能够达到最佳的性能和效率。
选型评估指标
推理性能
- 吞吐量(Requests Per Second)
- 响应时间
- 生成速度(Tokens Generated Per Second)
- 支持的模型数量
推理优化支持程度
- 模型侧:是否支持快速低比特量化【重要】,有哪些手段,复杂度如何
- Low Bit
- AWQ
- KV Cache
- 工程服务侧:是否支持服务并发优化【重要】,有哪些手段,复杂度如何
- 工程服务侧:是否支持分布式优化【次重要】,有哪些手段,复杂度如何
- 模型侧:是否支持访存优化【较重要】,有哪些手段,复杂度如何
- Page Atten.
- Flash Atten.
- 模型侧:是否支持算子优化【较重要】,有哪些手段,复杂度如何
- 其他:是否具有其他新型优化技术的支持
易用性与学习成本
- 直观代码量(高 - >5k,中 - 1~5k,低 - <1k)
- 部署过程复杂度(高 - 依赖多、步骤多,低 - 一键部署)
- API 设计清晰度
- 官方文档可读性
可持续维护性
- 开源社区活跃度
- Stars 数
- Open Issues 数
- 开源社区成熟度
- 是否有官方网站与社区
- 是否有可追踪的核心开发小组
- 是否有实体主体或可查的 funding 公司
- Reddit 讨论热度
- Twitter 讨论热度
技术兼容性
- 与目前部门技术语言的兼容
- 与其他工具的兼容,如 Agent 框架
- 与未来技术的兼容性(即拓展性)
技术备选
从发布时间和核心开发厂牌来区分,分成老牌和新贵两类
老牌
- vLLM:由 Nvidia 开源,专为降低大模型推理的显存占用设计。vLLM 通过将模型的部分保存在 CPU 内存或硬盘上,并仅加载当前计算所需的部分到 GPU 显存中,从而打破 GPU 显存的限制。它支持 PyTorch 和 FasterTransformer 后端,能够适配现有模型,并实现高效的推理加速。
- Tensorrt-LLM & Triton:NVIDIA TensorRT-LLM 和 Triton 推理服务器是两个不同但互补的技术,主要用于优化和部署大型语言模型(LLM)的推理服务。
- TensorRt:Nvidia 在 TensorRT 推理引擎基础上,为 Transformer 类大模型推理优化的框架。它支持多种优化技术,如 kernel 融合、矩阵乘优化、量化感知训练等,并支持多 GPU 多节点部署,可扩展到万亿规模参数。Tensorrt-LLM 在 Nvidia 的测试中表现出显著的推理加速。
- Triton: Triton Inference Server 是一个端到端的推理服务框架,支持多种模型格式和推理引擎。
- Text Generation Inference (TextGen):由 Hugging Face 主导的开源推理框架,专为自然语言生成模型如 GPT、OPT 等提供高性能推理。TextGen 高度优化了核心代码,支持 FP16、int8 等多种精度,并支持多 GPU 多节点扩展。在 OPT-175B 基准测试中,TextGen 实现了显著的推理加速。
- DeepSpeed:由微软开源,是一个大模型训练加速库,其推理加速版本 DeepSpeed-Inference 通过内存优化、计算优化、通信优化等手段,降低了推理延迟并提升了吞吐量。它支持多 GPU 横向扩展,并集成了 Hugging Face transformers 库,简化了使用流程。
新贵
- LLama.cpp:是一个开源的 C++ 库,用于加载和运行由 Meta(原 Facebook)公司开源的预训练大型语言模型 LLaMA。它通过优化和量化权重,使得在各种硬件上本地运行大型模型成为可能,包括在手机、笔记本电脑以及树莓派等设备上。提供基础的推理功能,但可能缺少一些高级功能,如上下文管理、插件系统等。
- Ollama:是一个开源的大型语言模型服务工具,旨在帮助用户快速在本地运行大型语言模型,如 LLaMA。利用 Docker 容器技术简化了大型语言模型的部署和管理过程,使得用户可以通过简单的命令在本地运行模型。支持多种操作系统,包括 Windows、macOS 和 Linux,并提供了丰富的预训练模型库。
分析
TensorRT-LLM
- TensorRT-LLM 是一个易于使用的 Python API,用于定义大型语言模型(LLM),并构建包含最先进优化的 TensorRT 引擎,以在 NVIDIA GPU 上高效执行推理。TensorRT-LLM 包含用于创建执行这些 TensorRT 引擎的 Python 和 C++ 运行时的组件,它还包括与 NVIDIA Triton 推理服务器集成的后端。使用 TensorRT-LLM 构建的模型可以在从单个 GPU 到多个节点(使用张量并行或管道并行)的多个 GPU 的广泛配置上执行。
- 为了最大化性能并减小内存占用,TensorRT-LLM 允许使用多种量化模式执行模型,TensorRT-LLM 支持 INT4 或 INT8 量化(以及 FP16 激活;也称 INT4/INT8 weight-only),以及 SmoothQuant 技术的完整实现。
Nvidia Triton Inference Server
- 在 TensorRT-LLM 里,它实现了模型的加载以及推理的调用。但是在生产上,我们不可能仅有这套 API 工具就足够,而还需要对应一套 Serving 服务,也就是一套 Server 框架,帮助我们部署各种模型,并以 API 的方式(例如 HTTP/REST 等)提供模型的推理服务,同时,还要能提供各种监控指标(例如 GPU 利用率、服务器吞吐、延迟等),可以帮助用户了解负载情况,并为后续扩缩容的推理服务的实现提供指标基础。
- 所以,要创建一个生产可用的 LLM 部署,可使用例如 Triton Inference Server 的 Serving 服务,结合 TensorRT-LLM 的推理引擎,利用 TensorRT-LLM C++ runtime 实现快速推理执行。同时它还提供了 in-flight batching 和 paged KV caching 等推理优化。
- 这里还需要再强调的是:Triton Inference Server,如其名字所示,它只是一个 Server 服务,本身不带模型推理功能,而是提供的 Serving 的服务。模型推理功能的实现,在 Triton 里是通过一个 backend 的抽象来实现的。TensorRT-LLM 就是其中一种 backend,可以对接到 Triton Inference Server 里,提供最终的模型推理功能。所以,Triton 不仅仅是只能和 TensorRT-LLM 集成使用,还可以和其他推理引擎集成,例如 vLLM。
TensorRT-LLM 与 vLLM 对比
vLLM 是开源社区一个非常热门的推理引擎,推理优化技术中的 Page Attention 这一重要就是源自 vLLM。在阅读官方文档,并对两个模型进行部署实验后,有大致如下直观感觉:
- vLLM 非常易于使用:vLLM 无论是环境准备(pip 即可)、模型部署(不需要编译模型)还是上手难度(文档全面、社区活跃),均优于 TensorRT-LLM 。TensorRT-LLM 的学习成本以及故障排查的难度都要高于 vLLM
- vLLM 支持的硬件部署选项更多:TensorRT-LLM 作为英伟达推出的框架,主要是针对自家的 GPU 进行的优化,所以仅适用于 Nvidia CUDA 。而 vLLM 目前除了支持 Nvidia CUDA 外,还支持 AMD ROCm、AWS Neuron 和 CPU 的部署
- 在性能表现上,参考社区在 2024 年 6 月使用 LLAMA3-8B 和 LLAMA3-70B with 4bit 量化模型做的 benchmark 测试,可以看到 vLLM 在TTFT(Time to First Token,即从发送请求到生成第一个token的时间,在交互式聊天场景较为重要)上表现不俗,优于 TensorRT-LLM。但是在 Token 生成速率上 TensorRT-LLM 表现更好(特别是在做了 4-bit 量化后,两者表现差异更大)
建议与结论
从 TensorRT-LLM+Triton 这套方法的部署过程来看,还是较为复杂的,需要先对模型进行编译,还要特别注意环境、参数的设置,稍不注意就无法正常部署。除此之外,Nvidia 的文档也不够清晰。总体来说,学习成本比较高,但也带来了相对应的推理效果提升的收益(相对于vLLM在量化模型推理、以及token生成速度的场景)。但是,在模型推理场景下,推理效果也并不是唯一选择因素,其他例如框架易用性、不同底层硬件的支持,也需要根据实际情况进行考量,选择最合适推理引擎。
系列文章:
一、大模型推理框架选型调研
二、TensorRT-LLM & Triton Server 部署过程记录
三、vLLM 大模型推理引擎调研文档
四、vLLM 推理引擎性能分析基准测试
五、vLLM 部署大模型问题记录
六、Triton Inference Server 架构原理