Company OpenAI Location 加利福尼亚州旧金山 Industry 人工智能研究

挑战

作为一家人工智能研究实验室,OpenAI 需要深度学习基础设施, 以便能够在云端或自有数据中心运行实验,还需要易于扩缩。可移植性、速度和成本是其主要考量因素。

解决方案

OpenAI 于 2016 年开始在 AWS 上运行 Kubernetes,并于 2017 年初迁移至 Azure。 OpenAI 在 Azure 和自有数据中心运行机器人和游戏等关键实验,具体取决于哪个集群有空闲容量。 "我们主要将 Kubernetes 用作批量调度系统,并依靠我们的 Autoscaler 来动态扩缩容集群",OpenAI 基础设施负责人 Christopher Berner 说道, "这样可以显著降低空闲节点的成本,同时仍能保持低延迟和快速迭代。"

影响

该公司受益于更高的可移植性:"由于 Kubernetes 提供了一致的 API,我们可以轻松地在不同集群之间迁移研究实验," Berner 说道。此外,能够在适当的时候使用自有数据中心,"这降低了成本,并让我们能够使用云端无法轻易获取的硬件," 他补充道。"只要利用率足够高,自有数据中心的成本就会更低。" 实验启动的时间也大大缩短:"一位研究人员正在开发新的分布式训练系统,他仅用两三天就让实验运行起来了。 随后他在一两周内将其扩展到数百个 GPU。此前,这一过程至少需要几个月的时间。"

从机器人实验到经典视频游戏研究,OpenAI 的人工智能技术研究旨在共享和开放。

OpenAI 的使命是确保强大的 AI 系统安全可靠,因此它非常重视开源——既从中受益,也向社区贡献安全技术。 "我们的研究希望尽可能广泛传播,让所有人都能受益,"OpenAI 基础设施负责人 Christopher Berner 说道。 该实验室的理念及其独特需求,使其选择了开源、云原生的深度学习基础设施策略。

OpenAI 于 2016 年开始在 AWS 上运行 Kubernetes,并在一年后将 Kubernetes 集群迁移至 Azure。 "我们可能与许多人使用 Kubernetes 的方式不同,"Berner 说道。 "我们主要将其用作批量调度和集群的工作负载管理工具。它用于协调大量相互连接的容器。我们依赖 Autoscaler 来动态扩缩容集群,从而大幅降低空闲节点成本,同时仍能保持低延迟和快速迭代。"

过去一年,Berner 负责在 OpenAI 的自有数据中心部署多个 Kubernetes 集群。 "我们采用混合模式,Kubernetes 控制平面(Kubernetes API 服务器、 etcd 等)都放在 Azure,而所有 Kubernetes 计算节点都放在自有数据中心,"Berner 解释道。 "云端非常方便,可用于管理 etcd 和所有 Master 节点,并在出现问题时备份或快速扩展新节点。 通过这种模式,我们既能降低成本,又能利用自有数据中心内更专业的硬件。"

目前,OpenAI 的不同团队运行着数十个项目。尽管最大规模的工作负载仍直接管理云端虚拟机, 但大多数实验都受益于 Kubernetes 提供的可移植性。 "由于 Kubernetes 提供了一致的 API,我们可以轻松地在不同集群之间迁移研究实验,"Berner 说道。 在本地数据中心部署的 Kubernetes 集群,通常用于需要大量 GPU 计算资源的任务,例如 ImageNet 训练, 而 CPU 密集型任务则运行在云端。此外,许多团队会根据集群的空闲情况,在 Azure 和自有数据中心之间动态切换,这种灵活性极具价值。

Berner 还向 OpenAI 内部团队推广 Kubernetes 解决方案。"我与游戏研究团队合作较多,他们目前在研究经典主机游戏," 他分享道。"他们之前一直在开发服务器上运行实验,后来尝试了 Google Cloud 并自行管理虚拟机。 最终,他们迁移到了我们的本地 Kubernetes 集群,结果非常成功。现在,他们的实验规模已扩展了 10 倍, 而且不需要花费大量工程资源来管理额外的机器。许多其他团队也在效仿这一做法。"

这种演进得益于 OpenAI 团队开发的 Kubernetes 交互工具和框架。 "研究人员只需编写 Python 代码,填写一些配置信息(如机器数量和类型), 然后系统就会自动准备所有规范并将其提交到 Kubernetes 集群进行部署," Berner 介绍道。"此外,我们还提供了额外的监控和工具,专门针对机器学习项目优化。"

Kubernetes 给 OpenAI 带来的影响令人印象深刻。 通过 Kubernetes 及相关框架和工具(包括自动扩展器),实验启动时间大大缩短。 "一位研究人员在两三天内就让新分布式训练系统的实验运行起来,并在一两周内扩展到数百个 GPU。 此前,这个过程至少需要几个月的时间,"Berner 说道。

此外,能够在适当的时候使用本地 Kubernetes 集群,不仅降低了成本,还使 OpenAI 能够访问云端无法提供的硬件。 "只要利用率高,本地数据中心的成本就会更低。而且,我们还可以根据需求自定义硬件配置,"他说。

OpenAI 也受益于 CNCF 云原生生态系统中的其他技术。gRPC 被许多系统用于不同服务之间的通信,而 Prometheus 则被用作“在出现问题时的调试工具”,Berner 表示。“实际上,我们的 Kubernetes 集群最近没有遇到任何真正的问题, 所以我认为已经有一段时间没人查看我们的 Prometheus 监控了。如果出现故障,它就会显示在那里。”

Berner 仍然专注于 Kubernetes 的可扩展性,这对深度学习实验至关重要。 OpenAI 已经成功将其在 Azure 上的某个 Kubernetes 集群扩展到超过 2,500 个节点。 Berner 说道:“我认为我们很快就会达到 Kubernetes 之前测试过的 5,000 台机器的规模。” 他补充道:“如果你对这些技术感兴趣,我们正在积极 招聘!”