项目介绍:ElasticDL
ElasticDL 是一个为 Kubernetes 设计的原生深度学习框架,该框架支持容错和弹性调度。这种设计能够有效提高集群资源的利用率,特别适用于 TensorFlow 和 PyTorch 的分布式深度学习任务。
核心功能
弹性调度与容错能力
ElasticDL 通过 Kubernetes 原生设计,使其具备容错能力。它利用 Kubernetes 的基于优先级的抢占机制,实现深度学习任务的弹性调度。当部分进程失败时,任务不会因此中断,而是继续执行。
支持 TensorFlow 和 PyTorch
- 兼容 TensorFlow Estimator。
- 兼容 TensorFlow Keras。
- 兼容 PyTorch。
简洁的接口
ElasticDL 提供了极简的接口。用户可以通过命令行分布式地训练模型,以下是一个基于 Keras API 定义模型的训练命令示例:
elasticdl train \
--image_name=elasticdl:mnist \
--model_zoo=model_zoo \
--model_def=mnist.mnist_functional_api.custom_model \
--training_data=/data/mnist/train \
--job_name=test-mnist \
--volume="host_path=/data,mount_path=/data"
快速入门
ElasticDL 同时支持在本地笔记本电脑、企业集群或公共云(如 Google Kubernetes Engine)上运行。项目提供了详细的分步教程供用户参考,用户可以快速熟悉并上手 ElasticDL 的使用。
背景
TensorFlow 和 PyTorch 本身具备原生的分布式计算功能,可以进行容错恢复。在某些进程失败时,分布式计算任务可能会中断,但可以通过重新启动任务并从最近的检查点文件恢复状态来继续。
相比之下,ElasticDL 不依赖于保存检查点文件。当部分进程失败时,ElasticDL 的任务仍能继续进行,这主要得益于其 Kubernetes 原生设计。当 Kubernetes 为了给新到来的高优先级任务腾出资源而终止一些进程时,ElasticDL 的任务不会因此而失败,只会以减少的资源继续运行。
这种弹性调度显著提高了集群的整体利用率。例如,在一个有 N 个 GPU 的集群中,如果一个任务仅使用了一个 GPU,而另一个需要 N 个 GPU 的新任务到来时,原始任务需等待完成才能开始新任务。而使用弹性调度,新任务可以立即使用 N-1 个 GPU 开始运行,而 Kubernetes 可能随着资源的释放逐步增加其 GPU 使用量。这种情况下,集群利用率可以达到 100%。
ElasticDL 通过 Kubernetes 原生设计实现这些功能,不依赖于像 Kubeflow 等扩展来运行 TensorFlow/PyTorch 程序。ElasticDL 作业的主进程直接调用 Kubernetes API 来启动工作节点和参数服务器,并监测并响应诸如进程或 Pod 被杀死的事件,以实现容错。
简而言之,ElasticDL 在拥有 Kubernetes 集群的情况下,大幅增强了 TensorFlow/PyTorch 的容错和弹性调度能力。我们还提供了在 Google Cloud 上搭建 Kubernetes 集群并运行 ElasticDL 作业的教程。这一设计尊重 TensorFlow 原生的分布式计算特性,允许其在任何平台上运行,而不要求特定的计算平台。
开发指南
有关开发指南,请参考 ElasticDL 的详细文档。