挑战
作为一家人工智能研究实验室,OpenAI 需要深度学习基础设施,以便在云端或自有数据中心运行实验并轻松扩展。可移植性、速度和成本是主要驱动因素。
解决方案
OpenAI 于 2016 年开始在 AWS 上运行 Kubernetes,并于 2017 年初迁移到 Azure。OpenAI 在 Azure 和自有数据中心运行机器人和游戏等领域的关键实验,具体取决于哪个集群有空闲容量。“我们主要将 Kubernetes 用作批处理调度系统,并依靠我们的自动扩缩器 (autoscaler) 来动态扩展和收缩我们的集群,”基础设施主管 Christopher Berner 表示。“这使我们能够显著降低闲置节点的成本,同时仍能提供低延迟和快速迭代。”
影响
该公司从更大的可移植性中获益:“因为 Kubernetes 提供了一致的 API,我们可以非常轻松地在集群之间迁移我们的研究实验,”Berner 说。他补充说,适时使用自有数据中心“降低了成本,并为我们提供了在云中不一定能获得的硬件访问权限”。“只要利用率高,那里的成本就会低得多。” 启动实验所需的时间也大大减少:“我们的一位正在研究新的分布式训练系统的研究人员,能够在两三天内让他的实验跑起来。在一两周内,他将其扩展到了数百个 GPU。以前,这很容易需要几个月的工作。”
OpenAI 的使命是确保强大的人工智能系统安全可靠,它非常重视开源——既从中受益,也将安全技术贡献给它。“我们所做的研究,我们希望尽可能广泛地传播,以便每个人都能受益,”OpenAI 基础设施主管 Christopher Berner 说。该实验室的理念以及其特殊需求,使其倾向于为其深度学习基础设施采用开源、云原生策略。
OpenAI 于 2016 年开始在 AWS 上运行 Kubernetes,一年后将 Kubernetes 集群迁移到 Azure。“我们使用 Kubernetes 的方式可能与很多人不同,”Berner 说。“我们将其用于批处理调度,并作为集群的工作负载管理器。它是协调大量相互连接的容器的一种方式。我们依靠我们的自动扩缩器 (autoscaler) 来动态扩展和收缩我们的集群。这使我们能够显著降低闲置节点的成本,同时仍能提供低延迟和快速迭代。”
在过去的一年里,Berner 监督了 OpenAI 自有数据中心中几个 Kubernetes 集群的启动。“我们采用混合模型运行它们,其中控制平面——Kubernetes API 服务器、etcd 以及所有其他组件——都在 Azure 中,而所有 Kubernetes 节点都在我们自己的数据中心,”Berner 说。“云非常方便管理 etcd 和所有主节点,以及进行备份并在出现故障时快速启动新节点。这种模型使我们能够利用较低的成本,并在我们自己的数据中心拥有更多专用硬件。”
OpenAI 的不同团队目前正在运行数十个项目。虽然最大规模的工作负载直接管理裸云虚拟机 (VM),但 OpenAI 的大多数实验都利用了 Kubernetes 的优势,包括可移植性。“因为 Kubernetes 提供了一致的 API,我们可以非常轻松地在集群之间迁移我们的研究实验,”Berner 说。本地集群通常“用于需要大量 GPU 的工作负载,比如训练 ImageNet 模型。任何 CPU 密集型的工作都在云中运行。但我们也有一些团队在 Azure 和我们自己的数据中心都运行他们的实验,具体取决于哪个集群有空闲容量,这非常有价值。”
Berner 已将 Kubernetes 集群提供给 OpenAI 的所有团队使用,前提是它适合他们的需求。“我与我们的游戏团队合作了很多,他们目前正在研究经典主机游戏,”他说。“他们一直在我们的开发服务器上运行大量实验,并且一直在尝试 Google Cloud,自己管理虚拟机 (VM)。我们让他们尝试了我们的第一个本地 Kubernetes 集群,结果非常成功。他们现在已完全迁移到那里,并且这使他们能够将实验规模扩大 10 倍,而且无需投入大量工程时间来研究如何管理更多机器。现在许多人都在走同一条路。”
OpenAI 的两个团队开发的用于处理与 Kubernetes 交互的框架和工具简化了这条道路。Berner 说:“你只需编写一些 Python 代码,填写一些配置,说明你需要多少台机器以及什么类型,然后它就会准备好所有这些规范并将其发送到 Kube 集群,以便在那里启动。”“它还提供了一些额外的监控和更好的工具,这些工具是专门为这些机器学习项目设计的。”
Kubernetes 在 OpenAI 产生的影响令人印象深刻。有了 Kubernetes 以及包括自动扩缩器 (autoscaler) 在内的框架和工具,启动实验所需的时间大大减少。Berner 说:“我们的一位正在研究新的分布式训练系统的研究人员,能够在两三天内让他的实验跑起来。”“在一两周内,他将其扩展到了数百个 GPU。以前,这很容易需要几个月的工作。”
此外,他们现在拥有的灵活性,可以在适当时使用他们的本地 Kubernetes 集群,“降低了成本,并为我们提供了在云中不一定能获得的硬件访问权限,”他说。“只要利用率高,我们数据中心的成本就会低得多。在一定程度上,你还可以根据你的具体需求定制硬件。”
OpenAI 也从 CNCF 云原生生态系统中的其他技术中受益。其许多系统使用 gRPC 进行不同服务之间的通信,并且 Prometheus 用于“在出现问题时作为调试工具,”Berner 说。“我们最近的 Kubernetes 集群实际上没有任何真正的问题,所以我认为有一段时间没有人查看过我们的 Prometheus 监控。如果有什么东西坏了,它就会在那里。”
Berner 继续关注的一个重点是 Kubernetes 的扩展能力,这对于深度学习实验至关重要。OpenAI 已经能够将其在 Azure 上的一个 Kubernetes 集群扩展到超过 2500 个节点。Berner 说:“我认为我们很快就会达到 Kubernetes 测试过的 5000 台机器的规模。”他补充道,“如果你对参与这些工作感到兴奋,我们肯定正在招聘!”