介绍
近年来,大型语言模型 (LLM) 一直在彻底改变自然语言处理领域。从 GPT-3 到 PaLM 等,这些模型可以生成类似人类的文本、回答问题、总结文档等等。然而,训练和部署 LLM 需要大量的计算。随着这些模型的规模和能力不断增长,选择合适的平台来开发、部署和扩展它们变得至关重要。
让我们深入探讨为什么 Kubernetes 会成为 LLM 的首选平台。我将介绍 Kubernetes 在可扩展性、灵活性、可移植性等方面如何满足大型语言模型的独特需求。最后,您将了解 OpenAI、Cohere 和 AI21 Labs 等大型 AI 实验室在云端的 Kubernetes 上运行其模型背后的原理。
可扩展性
Kubernetes 在大型语言模型方面大放异彩的主要原因之一是其无与伦比的可扩展性。LLM 的需求巨大——通常需要数千个 GPU 或 TPU 来训练和运行推理。Kubernetes 通过自动扩展功能,可以轻松地根据需要扩展或缩减 LLM 的部署。
团队可以根据 CPU/内存使用率阈值定义水平 pod 自动扩展器 (HPA)。这使 Kubernetes 能够自动启动或终止 LLM pod 的副本,以保持最佳资源利用率水平。Kubernetes 调度程序将这些副本均匀分布在可用节点上。这种自动扩展与不同 LLM 工作负载的动态计算需求完美结合。
除了自动扩展单个 Pod 之外,Kubernetes 服务和控制器还可以轻松扩展整个集群本身。Amazon EKS、Azure AKS 和 Google GKE 等平台允许启动/关闭节点,以大规模扩展 LLM 的计算能力。团队可以使用几个节点运行小型研究实验,然后扩展到数千个节点以进行完整的模型训练。
在处理不同 LLM 作业的激增需求时,这种扩展灵活性对于成本效益至关重要。研究人员不必提前预测峰值使用量并过度配置资源。此处的弹性可扩展性提供了精细控制,以在性能和成本之间取得适当的平衡。
资源管理
除了扩大和缩小资源规模外,Kubernetes 还提供复杂的资源管理功能,以优化 LLM 的利用率。可以在命名空间、节点或单个容器上定义 CPU/内存请求和限制,以精确分配资源。
设置资源配额可防止任何单个 LLM 作业占用资源并导致其他作业资源匮乏。优先级类别允许区分服务级别 — 因此关键生产 LLM 服务比实验作业具有调度优先级。准入控制器可以限制集群资源总使用量以保持余量。
此外,Kubernetes 拥有丰富的利用率和瓶颈可观测性数据。Metrics-server、kube 状态指标和 Prometheus 可实时查看资源使用情况、请求与限制等。这允许团队微调请求/限制和基础设施规模,以在过度配置(浪费)和配置不足(排队)之间取得适当的平衡。
最终结果是集群利用率远高于传统 HPC 环境。团队可以使用 Kubernetes 的资源管理功能将具有不同要求的多个 LLM 工作负载安全地整合到共享基础架构上。这可以提高研究人员的实验速度,同时最大限度地提高每个计算单元的投资回报率。
快速迭代
Kubernetes 使团队能够快速迭代 — 这是试验不断发展的 LLM 时的一个重要标准。通过提供声明性 API,Kubernetes 允许基础架构即代码并实现跨环境的可重复性。
LLM 研究人员可以将实验定义为简短的 YAML 清单,声明资源请求、安装、环境变量等。这些配置可以签入源代码控制,并允许轻松启动相同且可重复的运行。冲洗并重复以在实验中快速迭代。
这有助于比较不同模型架构、超参数、训练数据和代码更改的结果。YAML 更改可以触发自动化 CI/CD 管道来验证新实验。失败的实验可以轻松回滚,同时保留审计历史记录。
这些功能缩短了从假设实验到部署模型和分析结果的周期。更快的迭代可以产生更好的模型。经过数周和数月,许多小型实验的积累超过了少数大型但缓慢的实验。
可移植性
Kubernetes 的一个主要优势是它为 LLM 提供了跨环境的可移植性。容器化的 LLM 工作负载可以在小型多节点集群上开发,然后无缝迁移到数千个云节点上进行扩展。
Kubernetes 概念在各个环境中保持不变——本地机器、云 VM 集群、边缘设备等。这种统一性和基础设施的松散耦合使得 LLM 可以在 Kubernetes 运行的任何地方运行,而无需更改代码。
在私有集群中训练的 LLM 可以作为容器机密导出,并轻松部署在 AWS、GCP、Azure 等公有云服务上。单个 Kubernetes yaml 只需进行少量编辑(例如更新机密或配置)即可跨环境移动。随着托管 Kubernetes 服务在基础设施和区域中变得无处不在,可移植性只会增加。
因此,团队可以在内部开发模型,然后将其部署到靠近用户的公共云边缘。机密计算等新兴趋势将进一步促进这种隐私敏感型 LLM 应用程序的机密性保护可移植性。边缘设备支持还允许新兴用例,例如在无人机、自动驾驶汽车等上使用 LLM 进行实时视频分析。
灵活性
Kubernetes 在部署 LLM 方面提供了极大的灵活性 — 既支持纵向扩展,也支持横向扩展。对于纵向扩展,Kubernetes 支持在单个 pod 中部署多个容器。这有助于实现模型并行 — 将更大的 LLM 分布在一台机器上的多个 GPU/TPU 上。
团队还可以跨节点扩展 LLM 以实现数据并行。模型副本在每个节点上运行,并行处理分片/数据批次。更大的集群可以加速超参数调整、集成模型并提高吞吐量。
Kubernetes 可以无缝协调各种并行方法,而不会施加任何限制。因此,工程师可以根据提供最佳准确性/性能/成本权衡的策略灵活地调整 LLM 训练/服务。
此外,Kubernetes 的生态系统在工具选择方面提供了灵活性。需要仪表板?选择 Kubernetes 原生或 lens.io/octant。分布式训练?使用 TFJob、PyWren 或 Kubeflow Pipelines。服务?TensorFlow Serving、Seldon Core 等都有 Kubernetes 集成。
借助 Kubernetes 作为通用运行时,团队在选择用于管理 LLM 工作流的最佳解决方案时拥有极大的自由度,从而避免供应商锁定。随着时间的推移,生态系统只会变得更加丰富,从而提供更大的灵活性。
云原生
当今最大的语言模型利用了多样化的云基础设施和服务。Kubernetes 是开发、部署和管理现代 LLM 的理想云原生平台。
Kubernetes 诞生于云时代,采用了不可变基础设施、声明式 API、松散耦合和环境一致性等原则。这允许可靠地利用各种托管云服务:自动扩展、负载平衡、云存储、数据库等。
例如,团队可以利用托管的 Kubernetes 服务(如 Elastic Kubernetes 服务 (EKS)、Azure Kubernetes 服务 (AKS) 和 Google Kubernetes Engine (GKE))来自动化运营复杂性。托管服务处理 Kubernetes 的配置、升级、保护和备份,让工程师可以专注于 LLM。
在存储方面,每个公共云都提供高性能 Kubernetes 原生存储类。因此,模型可以扩展到 PB 级云存储,如 S3、存储帐户或云存储桶。索引文件系统(如 EFS)允许共享访问,非常适合分布式训练。
Kubernetes 对 GPU/TPU 实例(如 EC2 P4/P3、Azure NDv2 系列和 GCP TPU VM)提供了很好的支持。这些实例加速了 LLM 所依赖的复杂神经网络的训练。云托管服务简化了这些加速计算集群的分配/调整大小。
云原生特性使 Kubernetes 可以充当统一的控制平面,跨越 LLM 所必需的异构服务,例如身份、安全、CI/CD、遥测等。这简化了利用云管理产品的过程。
标准化
Kubernetes 被采用为事实上的容器编排 API 标准,这在其生态系统中引发了一场“寒武纪大爆发”。如今,超过 2500 个平台和工具与 Kubernetes 集成,从而创建了丰富的解决方案。
公有云竞相提供托管的 Kubernetes 服务,如 EKS、AKS 和 GKE,将其视为明显的领导者。NVIDIA、NetApp、Mirantis 和 VMware 等全球企业都提供了定制解决方案来简化 Kubernetes 的运行。每个现代人工智能实验室都在利用 Kubernetes,这表明它已成为一种标准。
这种标准化效应降低了采用 Kubernetes 的门槛。丰富的工具让概念在工具之间传递时学习曲线变浅。充满活力的社区创造了健康的知识共享和最佳实践的演变。
随着团队采用 Kubernetes 进行 LLM 学习,他们意识到可以轻松找到人才、文档和共享学习,从而加速他们的旅程。与 TensorFlow、PyTorch、CUDA、Jupyter 等相邻技术的集成进一步简化了采用。随着时间的推移,在 Kubernetes 上部署的技能成为默认期望。
与专有编排器相比,Kubernetes 标准化可以简化工具集成、市场增长和跨团队和复杂工作流程的人才流动。这些网络效应推动了数据、模型构建、标签、特征存储等各层面的快速创新,加速了 Kubernetes 上 LLM 的飞轮效应。
可观察性
训练复杂的语言模型可能需要几天或几周才能完成一次运行。Kubernetes 提供了丰富的可观察性和监控功能,可让用户了解这些长时间运行的进程。
指标服务器收集集群级 CPU/内存使用情况以进行实时监控。水平 pod 自动扩缩器可以利用此功能来触发扩缩事件。Kubernetes 还原生聚合并公开 pod 资源使用情况指标。
Prometheus 等附加组件可提取用于节点、部署和容器的时间序列监控的高级指标。Grafana 提供丰富的仪表板前端来可视化指标。导入 Kubernetes jsonnet 以获取用于容量规划的开箱即用的 Kubernetes 指标仪表板。
在日志方面,将重要的应用程序日志收集到集中式 Elastic 堆栈或 CloudWatch 等托管云服务中。Fluentd 聚合容器日志,而 OpenTracing/Jaeger 连接跟踪。这些功能共同为跨多个 Kubernetes pod 的复杂 LLM 工作流提供可观察性。
像 Helm 这样的软件包管理器简化了在 Kubernetes 上部署这些可观察性工具的过程。与组装定制解决方案相比,预先打包的仪表板可让采用者更快地上手。从实验阶段开始的强大监控可加速大规模跟踪实验。
分布式训练
随着语言模型的规模呈指数级增长,跨集群的分布式训练变得必不可少,以提供足够的计算能力。幸运的是,Kubernetes 可以无缝扩展分布式训练。
Kubernetes 支持不同的分布式训练方法 – 通过模型副本实现数据并行,或跨 pod 拆分模型的模型并行。K8s 负责在最佳硬件(如 GPU 节点)上分配 pod。网络策略可确保快速节点互连,实现高吞吐量 all-reduce。
对于数据并行性,K8s 原生 API 可以根据跟踪训练步骤时间或准确性的指标自动扩展副本。Kubernetes 上的 Kubeflow 管道、PyTorch Elastics 或 TensorFlow 等框架简化了作业分布式作业协调。
模型并行方法可以在单个 pod 内运行,多个容器安装相同的模型卷 — 非常适合扩展节点。Kubernetes 卷快照有助于跨容器检查模型参数。
无论是利用 TensorFlowMesh、Horovod 还是其他框架,它们都可以与 Kubernetes 顺利集成。因此,从业者可以利用 Kubernetes 进行更灵活的大规模超参数调整并加速模型收敛。
通过操纵 Kubernetes 命名空间和亲和性规则,甚至可以实现混合数据/模型并行性的高级拓扑。节点池可以根据子作业需求,划分具有丰富 GPU 的快速扩展服务器和更便宜的扩展硬件。
网络和调度基础设施使所有这些扩展复杂性变得无缝衔接。这可以缩短训练复杂模型(如具有超过 5300 亿个参数的 PaLM)的总体时间!
服务生产 LLM 推理
一旦模型经过充分训练,Kubernetes 便能够出色地处理不可预测的生产推理(预测)负载。部署为 Kubernetes 容器/服务的 LLM 受益于内置的扩展、弹性和路由功能。
团队将经过训练的 LLM 模型包装在容器镜像中,在启动时初始化库、加载参数等。Pod 充当沙箱,保护整个基础设施免于崩溃。Kubernetes 服务会在 Pod/副本之间均匀地平衡请求的负载。
根据推理查询量,Kubernetes 将自动扩展 Pod,确保在流量高峰期间提供响应服务。工程师可以根据延迟、吞吐量等指标(而不仅仅是 CPU/内存使用率)来触发扩展。请求在扩展期间排队,以防止过载。
在硬件方面,GPU/TPU 实例和 IPU/NNP 等专用芯片的异构组合可以加速推理。节点使用污点/容忍度按硬件类型进行细分,以便推理 pod 落入最佳资源。亲和性规则进一步微调位置。
为了提高弹性,多个可用区域可避免区域中断的影响范围。Kubernetes 会自动处理失败的 Pod、耗尽的节点并重新安排推理请求,以保持整体 SLA。工程师可以设置资源请求/限制以在争用期间强制执行 QoS。
总之,这使得 Kubernetes 成为关键任务生产级 LLM 部署的完美选择——从模型构建到训练再到推理服务,保持整体工作流程顺畅!
多租户隔离
MLOps 成熟组织最终会在业务领域、团队和环境中拥有多个 LLM 项目。在这样的环境中,多租户和安全隔离变得至关重要——Kubernetes 就是为此而设计的。
内置命名空间为跨团队和测试/准备/生产环境的资源配额分配提供了硬边界。网络策略限制跨命名空间对 pod 和服务的访问。团队拥有命名空间,但无法查看其他人的工作。
资源配额限制可限制命名空间用户通过过度配置来占用集群资源。限制范围可避免创建 100GPU Pod。它们共同鼓励资源消耗问责制和公平共享,形成虚拟集群抽象。
为了提高安全性,Kubernetes RBAC 将用户角色绑定到命名空间/集群范围的权限。团队可以自行启动实验,而无需过多的权限。无处不在的 TLS 和审计日志确保合规性。Dex/OIDC 集成会发出短期访问令牌以避免违规。
通过节点上的可信硬件进行机密计算,为超安全用例提供硬件强制隔离。使用 CryptFS 等文件系统写入加密数据可确保隐私。Anchore 在允许使用之前会扫描容器镜像中的 CVE。
这些功能允许将多个 LLM 团队安全地整合到具有适当防护栏的共享编排层上,从而提高利用率和中央可视性。中央平台团队可以专注于保持环境的高可用性。
结论
最后,Kubernetes 提供了无与伦比的可扩展性、灵活性、可移植性和云原生架构的组合,使其成为运行大型语言模型的理想选择。
OpenAI、Cohere、AI21 等领先实验室已采用 Kubernetes 来生产 GPT-4、Hyperthon、Jurassic-1 等 LLM。其不断扩展的集成工具生态系统有助于简化管理复杂的 ML 工作流程。
随着 LLM 能力的不断提升,Kubernetes 将继续作为其从实验到培训再到生产部署过程中的标准平台。它在分布式编排、资源效率和自动化方面的独特优势使其远远领先于专有选项。
各个技能组和组织的工程师都将从对 Kubernetes 熟练程度的深入投资中受益匪浅,因为这是基础理解。我们实际上只是触及了大型语言模型这个美丽新世界中可能出现的创新的表面!