“将一个微调过的大型语言模型部署到生产环境,与传统的机器学习模型相比,会面临独特的挑战。这些模型庞大的体量,加上自回归生成对计算性能的要求,需要专门的基础设施才能达到可接受的延迟和吞吐量。简单地加载一个拥有数十亿参数的模型并顺序运行推理,对于要求响应速度和并发处理的应用来说通常是不切实际的。这时,专门的推理服务框架就显得非常重要了。”标准的模型服务解决方案可能难以应对大型语言模型固有的特定性能瓶颈。这些瓶颈主要包括:内存占用: 大型语言模型不仅需要大量的GPU内存来存储其权重,还需要存储生成过程中的中间状态。这种状态通常被称为键值(KV)缓存,它会随着序列长度和并发请求数量的增加而增长,很快就会成为主要的内存限制。计算成本: 注意力机制作为Transformer的核心组成部分,其计算复杂度通常与序列长度的平方相关(例如,标准注意力机制为 $O(n^2)$)。自回归解码过程中,令牌是逐一生成的,这本身就是顺序的并且对延迟敏感。吞吐量与延迟的权衡: 平衡同时处理大量请求(高吞吐量)的需求与快速响应(低延迟)的要求是很困难的,尤其是在高负载情况下。大型语言模型推理服务框架经过专门设计,使用优化技术来应对这些挑战。大型语言模型服务中的核心技术现代大型语言模型服务框架中普遍实施了几种高级技术,以最大限度地提高效率:连续批处理(Continuous Batching): 传统的静态批处理会等待批次中的所有序列完成生成后才进行下一步操作。这会导致GPU利用率显著不足,因为GPU会闲置等待最慢的序列(通常是最长的那个)完成生成。连续批处理通过对批次中所有活跃请求逐一迭代生成过程来解决这个问题。当一个序列完成时,新的传入请求可以立即添加到批次中,从而使GPU保持持续忙碌状态,并显著提高整体吞吐量。分页注意力(PagedAttention): 有效管理KV缓存非常重要。KV缓存可能占用数GB的内存,而朴素的分配策略会导致碎片化和空间浪费。受操作系统中虚拟内存和分页机制的启发,分页注意力(由vLLM推广)将KV缓存分配到称为“页”的非连续内存块中。这使得内存管理更加灵活,减少了内部碎片,并且更容易处理具有不同序列长度的大批次,通过在内存中容纳更多请求,从而有效实现更高的吞吐量。优化计算核(Optimized Kernels): 框架通常会集成定制的计算核(通常为NVIDIA GPU用CUDA编写),以加速特定操作,最明显的就是注意力机制。FlashAttention及其变体等技术减少了内存读写,并针对特定硬件优化了计算,与标准实现相比,带来了显著的加速和更低的内存占用。张量并行(Tensor Parallelism): 对于单个GPU无法容纳的大型模型,张量并行技术可以将模型的权重和计算分散到单个节点内的多个GPU上。服务框架会管理推理过程中GPU之间所需的通信和同步。量化集成(Quantization Integration): 许多框架支持使用前面讨论过的方法(如使用AWQ或GPTQ的int8,甚至更低精度的格式)进行量化的模型。使用量化权重运行推理可以减少内存使用,并能加速计算,尤其是在具有低精度算术专用支持的硬件上。流行的推理服务框架尽管这个方面发展迅速,但有几个框架在大型语言模型服务方面已获得认可:vLLM由加州大学伯克利分校的研究人员开发,vLLM主要侧重于最大化吞吐量。其主要创新是分页注意力(PagedAttention),这显著提升了KV缓存管理能力。优点: 领先的吞吐量表现,通过分页注意力实现高效内存利用,支持连续批处理,与Hugging Face模型良好集成,支持多种解码算法。考量: 主要侧重于推理性能;与更通用的服务器相比,初期在生产环境的可观测性或复杂部署模式方面可能功能较少,但其功能正在快速增加。典型用途: 以最大化并发用户数量或每秒处理令牌数为主要目标的应用。Text Generation Inference (TGI)由Hugging Face开发和维护,TGI被设计为用于部署Transformer模型(包括大型语言模型)的生产级解决方案。优点: 稳定性好,支持连续批处理,内置支持多种量化方案(bitsandbytes、GPTQ、AWQ、EETQ),支持张量并行,通过Server-Sent Events (SSE) 进行令牌流式传输,支持Prometheus指标用于监控,与Hugging Face生态系统易于集成。考量: 性能可能略逊于最先进的水平(如在某些基准测试中vLLM),但它提供了一个非常稳定且功能丰富的平台。典型用途: 通用大型语言模型部署,特别是对于已大量使用Hugging Face生态系统的用户,且需要量化和内置监控等功能。NVIDIA Triton Inference ServerTriton是NVIDIA推出的一款更通用的推理服务器,支持各种模型框架(PyTorch、TensorFlow、ONNX、TensorRT)和模型类型(CNNs、RNNs、Transformers)。它能有效服务大型语言模型,通常会利用专门的后端。优点: 高度灵活,支持同时服务多个模型和框架,动态批处理,模型版本控制,集成流水线,支持HTTP/gRPC端点,提供丰富的指标。可以与TensorRT-LLM(NVIDIA针对NVIDIA GPU上大型语言模型推理高度优化的库)集成,实现顶级的性能。考量: 配置可能比专门的大型语言模型服务器更复杂。要达到大型语言模型的峰值性能,通常需要使用TensorRT-LLM后端,这可能涉及模型转换步骤。典型用途: 需要服务多种机器学习模型(不仅仅是大型语言模型)的组织,或需要高级部署能力,或旨在通过集成TensorRT-LLM在NVIDIA硬件上实现峰值性能的组织。其他框架TensorRT-LLM: 虽然常作为Triton的后端使用,NVIDIA的TensorRT-LLM也可以更直接地使用。它提供优化的计算核、预处理/后处理,并支持高级技术,如“在途批处理”(NVIDIA对连续批处理的称呼)和分页KV缓存。需要将模型编译成TensorRT引擎。CTranslate2: 一个C++推理库,侧重于在CPU和GPU上高效执行,常用于翻译领域的Transformer模型,但也适用于通用大型语言模型。以其速度快和相对较低的资源使用而闻名,尤其是在量化后。DeepSpeed Inference: 扩展了DeepSpeed训练库,提供优化的推理功能,包括针对大型模型推理的优化,这些优化运用了训练研究中开发的技术。选择合适的框架选择合适的框架取决于您的具体需求:{"layout":{"title":"大型语言模型服务框架特性对比","xaxis":{"title":"框架"},"yaxis":{"title":"相对侧重程度","tickvals":[1,2,3],"ticktext":["一般","中等","很强"]},"legend":{"orientation":"h","yanchor":"bottom","y":-0.4,"xanchor":"center","x":0.5}},"data":[{"type":"bar","name":"吞吐量优化","x":["vLLM","TGI","Triton + TRT-LLM"],"y":[3,2.5,3],"marker":{"color":"#4263eb"}},{"type":"bar","name":"量化支持(内置)","x":["vLLM","TGI","Triton + TRT-LLM"],"y":[2,3,2.5],"marker":{"color":"#12b886"}},{"type":"bar","name":"易用性(HuggingFace集成)","x":["vLLM","TGI","Triton + TRT-LLM"],"y":[2.5,3,1.5],"marker":{"color":"#fab005"}},{"type":"bar","name":"灵活性(多模型/多框架)","x":["vLLM","TGI","Triton + TRT-LLM"],"y":[1,1.5,3],"marker":{"color":"#be4bdb"}}]}这是对流行大型语言模型服务框架在重要特性上的相对侧重程度进行定性比较。Triton具有高度灵活性,而TGI提供强大的内置量化和Hugging Face集成。vLLM和Triton+TRT-LLM旨在实现最大吞吐量。考虑以下因素:主要目标: 是最大吞吐量(vLLM、TensorRT-LLM),特定生态系统内的易用性(TGI),还是服务多样化模型的灵活性(Triton)?硬件: 可用的GPU内存、计算能力和供应商(大多数优化都是针对NVIDIA GPU的CUDA)。量化需求: 框架是否原生支持您使用的量化格式(例如:GPTQ、AWQ)?运维要求: 是否需要模型版本控制、集成流水线、详细监控指标等功能(Triton在这方面表现出色)。团队专业能力: 是否熟悉特定生态系统(Hugging Face、NVIDIA)或部署工具(Docker、Kubernetes)。集成与部署流程无论选择哪个框架,部署流程通常包括:打包: 准备您的微调模型文件(权重、分词器配置)。这可能包括将模型转换为特定格式(如ONNX或TensorRT引擎),或确保其与框架的加载机制兼容(例如,vLLM/TGI的Hugging Face格式)。如果使用了PEFT适配器但未合并,请确保框架支持将它们与基础模型一起加载,或按照前面讨论的,提前进行合并。容器化: 将推理服务器、模型文件和依赖项打包到Docker容器中,以实现可移植性和可扩展性。配置: 设置框架参数,如张量并行度、量化方法、最大批处理大小和KV缓存分配。部署: 使用Kubernetes等编排工具部署容器,设置网络(负载均衡器、API网关),并根据负载配置自动扩缩容。监控: 将框架的指标端点(例如Prometheus)连接到您的监控堆栈,以跟踪延迟、吞吐量、GPU利用率和错误率,如本章最后一部分所讨论。“在生产环境中部署大型语言模型时,使用专门的推理服务框架已不再是可选项。它们提供必要的专门优化,可以将一个功能强大的微调模型转变为响应迅速、可扩展且成本效益高的服务,从而弥合模型训练与应用之间的重要鸿沟。”