大模型推理框架选型调研

背景

公司需要新增了 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 框架
  • 与未来技术的兼容性(即拓展性)

技术备选

从发布时间和核心开发厂牌来区分,分成老牌和新贵两类

老牌

  1. vLLM:由 Nvidia 开源,专为降低大模型推理的显存占用设计。vLLM 通过将模型的部分保存在 CPU 内存或硬盘上,并仅加载当前计算所需的部分到 GPU 显存中,从而打破 GPU 显存的限制。它支持 PyTorch 和 FasterTransformer 后端,能够适配现有模型,并实现高效的推理加速。
  2. Tensorrt-LLM & Triton:NVIDIA TensorRT-LLM 和 Triton 推理服务器是两个不同但互补的技术,主要用于优化和部署大型语言模型(LLM)的推理服务。
    • TensorRt:Nvidia 在 TensorRT 推理引擎基础上,为 Transformer 类大模型推理优化的框架。它支持多种优化技术,如 kernel 融合、矩阵乘优化、量化感知训练等,并支持多 GPU 多节点部署,可扩展到万亿规模参数。Tensorrt-LLM 在 Nvidia 的测试中表现出显著的推理加速。
    • Triton: Triton Inference Server 是一个端到端的推理服务框架,支持多种模型格式和推理引擎。
  3. Text Generation Inference (TextGen):由 Hugging Face 主导的开源推理框架,专为自然语言生成模型如 GPT、OPT 等提供高性能推理。TextGen 高度优化了核心代码,支持 FP16、int8 等多种精度,并支持多 GPU 多节点扩展。在 OPT-175B 基准测试中,TextGen 实现了显著的推理加速。
  4. DeepSpeed:由微软开源,是一个大模型训练加速库,其推理加速版本 DeepSpeed-Inference 通过内存优化、计算优化、通信优化等手段,降低了推理延迟并提升了吞吐量。它支持多 GPU 横向扩展,并集成了 Hugging Face transformers 库,简化了使用流程。

新贵

  1. LLama.cpp:是一个开源的 C++ 库,用于加载和运行由 Meta(原 Facebook)公司开源的预训练大型语言模型 LLaMA。它通过优化和量化权重,使得在各种硬件上本地运行大型模型成为可能,包括在手机、笔记本电脑以及树莓派等设备上。提供基础的推理功能,但可能缺少一些高级功能,如上下文管理、插件系统等。
  2. 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。在阅读官方文档,并对两个模型进行部署实验后,有大致如下直观感觉:

  1. vLLM 非常易于使用:vLLM 无论是环境准备(pip 即可)、模型部署(不需要编译模型)还是上手难度(文档全面、社区活跃),均优于 TensorRT-LLM 。TensorRT-LLM 的学习成本以及故障排查的难度都要高于 vLLM
  2. vLLM 支持的硬件部署选项更多:TensorRT-LLM 作为英伟达推出的框架,主要是针对自家的 GPU 进行的优化,所以仅适用于 Nvidia CUDA 。而 vLLM 目前除了支持 Nvidia CUDA 外,还支持 AMD ROCm、AWS Neuron 和 CPU 的部署
  3. 在性能表现上,参考社区在 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 架构原理

### 大模型推理的技术与方法 大模型推理涉及多个关键技术领域,包括但不限于高效的内存管理、并行化处理以及特定硬件加速等。以下是关于大模型推理的一些核心技术和方法: #### 1. 内存优化技术 为了提高大模型推理的效率,许多框架采用了先进的内存优化技术。例如,PagedAttention 是一种通过分页机制来减少内存浪费的方法[^2]。这种方法能够显著降低 GPU 显存占用率,从而支持更大规模的模型运行。 #### 2. 创新优化策略 除了 PagedAttention,还有其他一些创新性的优化手段被广泛应用于当前的大模型推理框架中。比如 Flash Attention 和类似的算法改进措施也被集成到某些工具链里,进一步增强了系统的整体表现力[^3]。 #### 3. 推理框架选型 针对不同场景需求可以选择合适的大模型推理框架。像 vLLM 这样的项目不仅提供了详尽的调研资料还进行了实际性能评测工作;另外 TensorRT-LLM 结合 NVIDIA 的专用库可以实现高度定制化的解决方案[^1]。 #### 4. 部署平台架构设计 Triton Inference Server 提供了一个灵活可扩展的服务端架构用于大规模生产环境下的 AI 应用程序部署。它允许用户轻松定义复杂的多阶段管道流程,并且兼容多种主流机器学习框架输出格式的数据结构对象作为输入参数传递给下游组件进行后续操作处理。 ```python import torch from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("bigscience/bloom") model = AutoModelForCausalLM.from_pretrained("bigscience/bloom") def generate_text(prompt): inputs = tokenizer.encode(prompt, return_tensors="pt").cuda() outputs = model.generate(inputs, max_length=50) result = tokenizer.decode(outputs[0], skip_special_tokens=True) return result print(generate_text("Once upon a time")) ``` 上述代码片段展示如何利用 Hugging Face Transformers 库加载预训练好的 BLOOM 模型完成简单的文本生成任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

✦昨夜星辰✦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值