Kubernetes上AI/ML工作负载扩展快速指南

NGINX | 2024年1月11日

在Kubernetes上运行人工智能(AI)和机器学习(ML)模型训练与推理时,动态扩缩容至关重要。除了需要高带宽存储和网络来摄取数据外,AI模型训练还需要大量且成本高昂的计算资源,其中大部分来自GPU或其他专用处理器。即使使用预训练模型,生产环境中的模型服务和微调等任务所需的计算资源仍高于大多数企业工作负载。

云原生Kubernetes旨在快速扩缩容,同时提高敏捷性,并在混合多云环境中为动态工作负载实现更具成本效益的资源利用。

本博客将介绍在Kubernetes上扩展AI/ML工作负载的3种常见方式,帮助您在不同环境中进行动态扩展时优化性能、节省成本并提高适应能力。

Kubernetes上AI/ML工作负载的三种扩展模式

Kubernetes扩展工作负载的三种常见方式是使用水平Pod自动扩缩器(HPA)、垂直Pod自动扩缩器(VPA)和集群自动扩缩器。

以下是这三种方法的详细说明:

  • HPA,相当于为应用添加实例或Pod副本,从而提升应用的扩展规模、容量和吞吐量。
  • VPA,相当于调整Pod的大小,通过增加计算和内存资源来提升其容量。
  • 集群自动扩缩器,根据Pod当前的资源需求,自动增加或减少Kubernetes集群中的节点数量。

每种模态在模型训练和推理方面各有优势,您可以通过以下用例进一步了解。

HPA用例

在许多情况下,分布式AI模型训练和推理工作负载可以横向扩展(即增加更多Pod,以加快训练过程或请求处理速度)。因此,这些工作负载可以受益于HPA。HPA可根据CPU和内存使用率等指标,甚至与工作负载相关的自定义指标和外部指标,横向扩展Pod数量。当工作负载随时间变化时,HPA可动态调整Pod数量,以优化资源利用率。

在Kubernetes中横向扩展AI工作负载时,还需要考虑负载均衡。为优化性能并及时处理请求,需要将传入请求分发到多个实例或Pod。因此,适合与HPA配合使用的工具之一是Ingress控制器。

VPA用例

AI模型训练任务通常会消耗大量资源,需要大量CPU、GPU和内存资源。VPA可以动态调整这些资源分配。这有助于确保每个Pod都有足够的资源来高效处理训练工作负载,并确保所有分配的Pod都具备足够的计算能力来执行计算。此外,在大型模型训练期间,内存需求可能会大幅波动。VPA可以根据需要增加内存分配,从而帮助防止内存不足错误。

从技术上讲,可以同时使用HPA和VPA,但需要谨慎配置以避免冲突,因为二者可能会尝试以不同方式(即水平扩缩容与垂直扩缩容)对同一工作负载进行扩缩容。必须明确界定每个自动扩缩器的作用范围,确保二者相互补充而非相互冲突。一种新兴方法是让二者分别作用于不同范围。例如,HPA根据工作负载在多个Pod之间进行扩缩容,而VPA则在HPA设定的限制范围内微调每个Pod的资源分配。

集群自动扩缩器用例

Cluster Autoscaler可帮助动态调整整个集群可用的计算、存储和网络基础设施资源池,以满足AI/ML工作负载的需求。组织可根据当前需求调整集群中的节点数量,从而在宏观层面实现负载均衡。由于AI/ML工作负载可能会不可预测地需要大量计算资源,因此这种调整对于确保良好性能十分必要。

HPA、VPA和Cluster Autoscaler各有其作用

总而言之,Kubernetes 自动扩缩容通过以下三种方式运行,并为 AI 工作负载带来益处:

  • HPA可扩缩需要处理不同请求速率的AI模型服务端点。
  • VPA可优化AI/ML工作负载的资源分配,确保每个Pod都有足够的资源进行高效处理,同时避免过度配置。
  • Cluster Autoscaler会向集群添加节点,以确保集群能够承载资源密集型AI作业;当计算需求较低时,则会移除节点。

在Kubernetes中管理AI/ML工作负载时,HPA、VPA和Cluster Autoscaler相互补充。Cluster Autoscaler确保有足够的节点满足工作负载需求,HPA将工作负载高效分布到多个Pod,而VPA则优化这些Pod的资源分配。三者共同为Kubernetes环境中的AI/ML应用提供全面的扩缩容和资源管理解决方案。

访问我们的“为AI之旅注入动力并提供保护”页面,详细了解F5和NGINX如何帮助交付、保护和优化AI/ML工作负载。


分享

关于作者

Ilya Krutov
Ilya Krutov高级产品营销经理 | F5 NGINX

Ilya Krutov 的更多博客文章

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。