概述
对于机器学习,它可以让团队将需要 GPU 的训练作业和延迟敏感的模型服务器打包到共享硬件上,而无需照顾单独的服务器。
深入探讨
Kubernetes 最初是在 Google 上构建的,用于运行 Web 服务,它将您的集群视为一个由 CPU、内存和 GPU 组成的大池,然后决定哪台机器运行每个容器。 ML 团队之所以依赖它,是因为工作负载是突发性的且成本高昂:训练运行可能需要 8 个 GPU 持续 6 个小时,然后什么都不需要。 Kubernetes 将该 pod 调度到具有空闲 GPU 的节点上,当作业完成时,它会释放硬件。它还使推理服务器保持活动状态,重新启动崩溃的容器并在计算机之间传播副本以实现弹性。 Kubeflow、Ray 和 KServe 等构建于其之上的工具添加了特定于 ML 的部分,例如分布式训练运算符、超参数调整和自动缩放模型端点,因此数据科学家可以使用更高级别的抽象而不是原始 YAML。
现实世界的实施
研究实验室使用 Kubeflow Training Operator 在四个节点上启动 32-GPU PyTorch 分布式训练作业,然后在收敛时自动释放 GPU。
一家电子商务公司通过 KServe 提供其推荐模型,该模型会在闪购期间自动扩展副本,并在一夜之间回落。
一家银行以 Kubernetes CronJobs 的形式运行夜间批处理评分作业,将它们在备用 CPU 节点上排队,这样它们就不会与白天的服务流量竞争。
一家初创公司使用 Kubernetes 上的 Ray 来运行并行超参数扫描,在现场实例上启动数十个短期试用 Pod 以降低成本。
ML 工作负载的 Kubernetes 的未来
团队可以将队列准入、合适的 GPU 资源暴露和拓扑感知布局与其 ML 工作负载控制器结合起来。组准入有助于避免部分工作人员分配,而模型服务器可以通过适当的服务配置支持缩放到零。这些行为取决于已安装的组件和设置。操作员应该测试恢复、资源限制、互连和冷启动延迟,而不是假设容器编排器单独提供所有培训或服务功能。
付诸实践
为什么这很重要
- 成本与预算. 多年来,架构决策决定着性能和运营成本。
- 更清晰的判决. 技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。
- 质量控制. 更好的工程选择可以减少生产中的可靠性事故。
留意
- 优化一项基准测试可以隐藏更广泛的系统弱点。
- 基础设施和维护成本常常被低估。
- 随着系统变得更加复杂,安全性和可观察性差距可能会扩大。
后续步骤
- 在实施之前定义延迟、质量和成本目标。
- 在实际负载和数据条件下进行基准测试。
- 仪器监控错误、漂移和用户影响。
- 在扩展之前准备回滚和事件响应路径。
不断探索
常见问题
什么是适用于机器学习工作负载的 Kubernetes?
Kubernetes 是一个开源系统,可以跨机器集群自动调度、扩展和重新启动容器化程序。对于机器学习,它可以让团队将需要 GPU 的训练作业和延迟敏感的模型服务器打包到共享硬件上,而无需照顾单独的服务器。
Kubernetes 调度程序针对 ML 工作负载的主要工作是什么?
调度程序将 Pod 的资源请求(CPU、内存、GPU)与可用节点进行匹配,并将 Pod 放置在适合的位置。它不涉及模型代码或数据。
Kubernetes 通常如何为 Pod 提供 GPU 可用?
设备插件将 GPU 作为可调度资源(例如 nvidia.com/gpu)公开,让 Pod 请求它们并让调度程序跟踪可用性。
对于 GPU 节点上的 NoSchedule 污点,匹配的 Pod 容忍会做什么?
容忍消除了匹配的污点屏障。其他资源和调度要求仍然适用。
哪个工具添加了 ML 特定的功能,例如在 Kubernetes 之上的分布式训练运算符?
Kubeflow 将 ML 工作流程分层到 Kubernetes 上,包括训练运算符、管道和调整,因此团队可以避免手写低级集群配置。
为什么 Kubernetes 非常适合突发性机器学习工作负载?
训练过程非常激烈:短暂使用大量 GPU,然后就没有了。 Kubernetes 在资源空闲时放置作业,并在完成后释放它们,从而提高利用率。