第 3 章. 模型 服务系统设计:深度解析
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
在第 1 章中,我们介绍了 主要模型服务范式,概述了常见的架构模式及其权衡取舍。在第 2 章中,我们探讨了 LLMs 如何在模型层面上进行推理并生成文本。本章将这些基础知识与生产工程实践相结合:探讨如何组织代码和基础设施,以构建适用于单模型和多模型场景的完整服务系统。
模型服务是一个快速发展的领域,目前已有数百种开源服务框架和商业解决方案可供选择。评估、采用并定制合适的解决方案可能会让人感到不知所措。与其从特定的框架入手,本章更侧重于从第一性原理出发建立直觉。通过理解服务系统在根本层面的结构,您将更有能力对任何框架或托管服务进行理性分析。
为此,我们将开发两个简化但具有代表性的服务系统:一个用于单模型 LLM 服务,另一个用于多模型服务。这些实现经过刻意简化——并非旨在取代 Triton 或 vLLM 等生产级框架——但它们捕捉了定义现实世界系统的核心组件和架构决策。通过这些示例,您将看到批处理、流式处理、路由、隔离和资源管理在实践中如何协同工作。
我们将首先构建一个支持批处理和流式处理的单模型 LLM 服务系统。在此基础上,我们将探讨通用单模型服务设计模式及其实际限制。随后,我们将扩展这些思路来构建多模型服务系统,并最终对两种常见的架构变体进行深入比较:一种侧重成本效率,另一种侧重延迟和可扩展性。
读完本章后,您将能够自信地分析单模型和多模型服务系统内部的运作机制。更重要的是,您将能够评估、调整并扩展开源或基于Cloud的服务解决方案,以满足您在性能、成本和运维方面的具体需求。
本章代码
您可以在本章配套的 GitHub 代码库中找到完整的示例代码。我们已为演示目的选取并简化了代码的关键部分。如需完整的实现细节和准确的上下文,请参阅完整的代码库。此外,请参阅 README 文件,了解在本地运行演示服务的分步说明。
从零开始构建在线 LLM 服务
vLLM 和 Triton 等现代 LLM 服务框架( )抽象化了托管 LLMs 涉及的大部分复杂性。然而,这些抽象同时也掩盖了重要的架构权衡。为了有效评估性能、成本和可扩展性,在依赖框架之前,理解服务系统的核心机制至关重要。
在本节中,我们将构建一个简化的在线单模型 LLM 服务系统。其目标并非取代生产环境中的服务框架,而是揭示这些框架所自动化的基础组件:LLM 服务的请求处理、批处理、流式处理、调度以及资源管理。
我们将从一个最简的生成服务开始,然后逐步添加批处理和流式处理功能。最后,我们将通过展示 vLLM 如何在实践中处理批处理来总结。通过理解这两种方法,您将能够更好地分析单模型服务架构、评估框架选择,并在实际系统中做出明智的设计权衡。
本书后续章节,特别是第8章,我们将深入探讨vLLM,并了解它如何以高度优化且具有可扩展性的方式解决这些相同挑战。
设计目标
在本练习中,您将构建 这一模型服务,该服务在启动时加载单个 LLM,并支持批处理和流式处理的并发生成请求。虽然本示例为便于演示而刻意简化,仅适用于可在 CPU 上运行的单个 LLM 模型,但它涵盖了所有必要组件,未来可通过先进的模型优化技术扩展为多节点、通用化的生产级系统。
我们的方法并非构建一个复杂的、生产就绪的服务,而是实现核心组件,以帮助您理解 LLM 服务中的以下关键方面:
-
Web API 如何设计以处理生成请求——包括批处理和流式处理
-
典型的 LLM 请求处理工作流是什么样子的 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access