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