生产环境LLM扩展:实战指南

LLM生产环境扩展:实战指南

大型语言模型 (LLM) 发展迅速,已从研究好奇转变为各种应用的强大工具。虽然使用 Llama.cpp 或 Ollama 等工具启动一个简单的聊天机器人相对简单,但在生产环境中部署 LLM 以处理实际工作负载则面临着不同的挑战。这些挑战包括管理多个并发用户、确保正常运行时间保证以及优化 GPU 资源利用率以避免超出预算限制。

在规模化服务LLM时所需的资源与在个人计算机上运行它所需的资源有很大不同。在PC上以小于4 GB的内存有效运行的模型,在生产环境中部署以处理大量并发请求时,可能需要 40 GB 或更多的 GPU 内存。

本指南探讨了将 AI 工作负载从初始概念验证扩展到生产就绪部署的途径。我们将引导您完成大规模部署 Gemma 3 或 Llama 3 等模型的过程。

利用 API 进行 LLM 集成

将 LLM 集成到代码库可以通过多种方法实现,但强烈建议使用与 OpenAI 兼容的 API 进行生产部署。这种方法提供了适应快速发展的模型格局的灵活性。仅仅几个月前还被认为是尖端的模型很快就会过时。

自从 2022 年 ChatGPT 引发的 AI 热潮以来,OpenAI 的 API 接口已成为将应用程序连接到 LLM 的事实标准。这种标准允许开发人员使用可用资源构建应用程序,例如从笔记本电脑上 Llama.cpp 中的 Mistral 7B 开始,并无缝过渡到 Mistral AI 的 API 服务器进行生产部署。这避免了被锁定到单一模型、推理引擎或 API 提供商。

基于云的推理服务提供了一种资本支出 (capex) 友好的 AI 部署扩展方式。这些服务无需硬件管理和模型配置,而是提供一个 API 用于应用程序集成。

除了主要模型构建商提供的 API 之外,越来越多的 AI 基础设施初创公司还为开源权重模型提供推理即服务。这些提供商的方法各不相同。SambaNova、Cerebras 和 Groq 等公司利用专用硬件或推测解码等技术来加速推理,但提供的模型选择较少。Fireworks AI 等其他公司支持使用低秩自适应 (LoRA) 适配器部署自定义微调模型。AI 生态系统的多样性需要在承诺使用特定提供商之前进行彻底的研究。

本地 LLM 部署注意事项

在由于隐私、监管或现有基础设施限制(例如,公司已经投资了 GPU 服务器)而无法采用基于云的方法的情况下,本地部署变得必要。这可能会带来一些挑战。出现的一些常见问题包括:

  • 模型选择: 适当的模型取决于具体的用例。为客户服务聊天机器人设计的模型与用于检索增强生成或作为代码助手的模型相比,要求不同。建议花时间与 API 提供商一起确定满足需求的模型。
  • 硬件要求: 确定必要的硬件至关重要,因为 GPU 既昂贵又难以获得。模型本身可以提供有关运行它所需的硬件的见解。较大的模型需要更多的硬件。可以通过将参数数量(以十亿为单位)乘以 2GB 来粗略估计最低 GPU 内存,以用于以 16 位精度训练的模型。对于 8 位模型,每十亿个参数需要 1GB。诸如量化之类的模型压缩技术可以将此值降低到每十亿个参数 512MB。这是一个下限。由于密钥值缓存(充当模型的短期记忆),需要额外的内存来同时为多个用户提供模型服务。Nvidia 的支持矩阵提供了有关运行各种模型所需的 GPU 的指导。
  • 冗余: 除了根据模型调整硬件大小之外,还必须考虑冗余。单个 GPU 节点容易出现故障,因此部署两个或更多系统以进行故障转移和负载平衡非常重要。
  • 部署方法: 可以使用各种方法在生产中部署和提供 LLM 服务:具有负载平衡器的裸机、虚拟机或 Docker 或 Kubernetes 中的容器。Kubernetes 通过自动执行容器创建、网络和负载平衡来简化大规模部署。

Kubernetes 用于 LLM 部署

Kubernetes 通过自动执行容器创建、网络和负载平衡来抽象出与大规模部署相关的许多复杂性。许多企业已经采用并了解 Kubernetes。Nvidia、Hugging Face 和其他公司倾向于使用容器化环境,其中包含 Nvidia 推理微服务 (NIM) 和 Hugging Face 生成式 AI 服务 (HUGS),这些服务已预先配置为用于常见的工作负载和部署。

推理引擎

有多种推理引擎可用于运行模型,包括 Ollama 和 Llama.cpp,它们与各种硬件兼容。为了扩展模型,通常使用 vLLM、TensorRT LLM、SGLang 和 PyTorch 等库。本指南侧重于使用 vLLM 部署模型,因为它支持广泛的流行模型,并在 Nvidia、AMD 和其他硬件上提供广泛的支持和兼容性。

准备 Kubernetes 环境

与典型的 Kubernetes 设置相比,设置一个与 GPU 一起工作的 Kubernetes 环境需要额外的驱动程序和依赖项。AMD 和 Nvidia 硬件的设置过程会有所不同。

本指南在单节点配置中使用 K3S。基本步骤与多节点环境类似,但必须在每个 GPU 工作节点上满足依赖关系,并且存储配置可能需要调整。

目标是为以生产友好的方式部署推理工作负载奠定坚实的基础。需要以下先决条件:

  • 具有至少一个受支持的 AMD 或 Nvidia GPU 板的服务器或工作站
  • 全新安装的 Ubuntu 24.04 LTS

Nvidia 依赖项

设置 Nvidia 加速的 K3S 环境需要安装 CUDA 驱动程序 Fabric Manager 和 Headless 服务器驱动程序。安装 Nvidia 的服务器实用程序以调试驱动程序问题。

更详细地展开说明一些关键章节,并加入更多细节和技术考量:

模型选择的深入探讨

模型选择不仅仅是挑选一个在排行榜上得分最高的模型。它需要深入理解应用场景的特性。例如,如果目标是构建一个高精度、低延迟的金融分析助手,那么模型的推理速度和准确性比模型的上下文窗口大小更为重要。需要考虑以下几个方面:

  • 领域知识: 模型是否经过特定领域的预训练或微调?例如,一个在医学文献上训练过的模型可能更适合处理医疗咨询,而不是一个通用模型。
  • 上下文窗口大小: 模型可以处理的文本长度是多少?对于需要处理长文档或复杂对话的应用,更大的上下文窗口至关重要。
  • 推理速度和成本: 模型的推理速度直接影响用户体验。同时,推理成本(特别是对于云端 API)会影响应用的运营成本。需要根据预算和性能要求进行权衡。
  • 安全性和偏见: 模型是否存在已知的安全漏洞或偏见?在涉及敏感信息的应用中,这一点尤为重要。需要进行充分的测试和评估,以确保模型的安全可靠。
  • 模型许可和合规性: 模型的许可协议是否允许在商业环境中使用?是否符合相关的法律法规?

硬件要求的精细化分析

硬件选择是成功部署 LLM 的关键。仅仅依靠参数数量来估计 GPU 内存需求是不够的。需要考虑以下因素:

  • 量化技术: 使用量化技术(例如 INT8 或 FP16)可以显著降低 GPU 内存需求,但可能会牺牲一定的精度。需要根据应用场景对精度和性能进行权衡。
  • 批处理大小: 增加批处理大小可以提高 GPU 利用率,但也会增加延迟。需要找到一个平衡点,以最大化吞吐量并保持可接受的延迟。
  • KV 缓存: KV 缓存用于存储模型在生成文本时的中间状态。KV 缓存的大小取决于上下文窗口大小和批处理大小。需要根据实际需求配置足够的内存。
  • GPU 架构: 不同的 GPU 架构具有不同的性能特征。例如,Nvidia 的 Ampere 和 Hopper 架构在 Transformer 模型的推理方面具有更高的效率。
  • 内存带宽: GPU 的内存带宽是影响推理速度的关键因素。更大的内存带宽可以更快地加载模型参数和中间状态。

除了 GPU 之外,CPU、内存和存储也需要充分考虑。CPU 用于预处理输入数据和后处理输出结果。内存用于存储模型代码、数据和中间状态。高速存储(例如 NVMe SSD)可以加速模型的加载和数据访问。

Kubernetes 部署的详细步骤

在 Kubernetes 上部署 LLM 需要 careful planning 和 execution。以下是一些关键步骤:

  1. 选择合适的 Kubernetes 发行版: 可以选择像 K3s 这样轻量级的发行版,也可以选择像 Rancher 这样功能更强大的发行版。选择取决于项目的规模和复杂性。

  2. 安装 GPU 驱动程序和 Kubernetes 设备插件: 需要安装 Nvidia 或 AMD 的 GPU 驱动程序和 Kubernetes 设备插件,以便 Kubernetes 可以识别和管理 GPU 资源。

  3. 创建 Kubernetes 部署和服务: 使用 YAML 文件定义 Kubernetes 部署和服务。部署指定要运行的容器镜像、资源需求和副本数量。服务定义了如何访问部署。

  4. 配置 GPU 资源限制: 为了防止资源争用,需要为每个容器设置 GPU 资源限制。可以使用 nvidia.com/gpuamd.com/gpu 资源类型来指定 GPU 数量。

  5. 使用 vLLM 进行模型服务: vLLM 提供了一个易于使用的 API,用于加载和运行 LLM。可以使用 vLLM 的 Python API 或 HTTP API 来与模型进行交互。

  6. 监控和日志记录: 使用 Prometheus 和 Grafana 等工具来监控 GPU 利用率、内存使用情况和推理延迟。使用 Fluentd 或 Elasticsearch 等工具来收集和分析日志。

  7. 自动伸缩: 使用 Kubernetes 的自动伸缩功能,根据负载自动调整副本数量。这可以确保应用在高峰时段具有足够的资源,并在低峰时段节省成本。

推理引擎的比较

选择合适的推理引擎对于获得最佳性能至关重要。以下是一些流行的推理引擎的比较:

  • vLLM: 一个快速且易于使用的推理引擎,支持广泛的模型。vLLM 使用 page attention 技术来提高内存效率,并支持动态批处理来提高吞吐量。
  • TensorRT LLM: Nvidia 的高性能推理引擎,针对 Nvidia GPU 进行了优化。TensorRT LLM 可以将模型编译成高度优化的代码,从而提高推理速度。
  • SGLang: 一个用于构建结构化语言应用的框架。SGLang 可以自动优化模型的推理过程,并提供高级功能,例如 prompt 管理和多模态支持。
  • PyTorch: 一个流行的深度学习框架,也可以用于推理。PyTorch 提供了灵活的 API 和丰富的工具,但需要更多的手动优化。

选择哪个推理引擎取决于具体的应用场景和性能要求。vLLM 是一个不错的起点,因为它易于使用且性能良好。如果需要更高的性能,可以考虑使用 TensorRT LLM 或 SGLang。如果需要更大的灵活性,可以使用 PyTorch。

通过深入理解这些关键领域,可以更好地应对 LLM 生产环境部署的挑战,并构建高效、可靠且可扩展的 AI 应用。