摘要: TensorFlow作为现在最为流行的深度学习代码库,在数据科学家中间非常流行,特别是可以明显加速训练效率的分布式训练更是杀手级的特性。但是如何真正部署和运行大规模的分布式模型训练,却成了新的挑战。
介绍
本系列将介绍如何在阿里云容器服务上运行Kubeflow, 本文介绍如何使用TfJob
运行分布式模型训练。
- 第一篇:阿里云上使用JupyterHub
- 第二篇:阿里云上小试TFJob
- 第三篇:利用TFJob运行分布式TensorFlow
- 第四篇:利用TFJob导出分布式TensorFlow模型
- 第五篇:利用TensorFlow Serving进行模型预测
TensorFlow分布式训练和Kubernetes
TensorFlow
作为现在最为流行的深度学习代码库,在数据科学家中间非常流行,特别是可以明显加速训练效率的分布式训练更是杀手级的特性。但是如何真正部署和运行大规模的分布式模型训练,却成了新的挑战。 实际分布式TensorFLow的使用者需要关心3件事情。
- 寻找足够运行训练的资源,通常一个分布式训练需要若干数量的worker(运算服务器)和ps(参数服务器),而这些运算成员都需要使用计算资源。
- 安装和配置支撑程序运算的软件和应用
- 根据分布式TensorFlow的设计,需要配置ClusterSpec。这个json格式的ClusterSpec是用来描述整个分布式训练集群的架构,比如需要使用两个worker和ps,
ClusterSpec
应该长成下面的样子,并且分布式训练中每个成员都需要利用这个ClusterSpec
初始化tf.train.ClusterSpec
对象,建立集群内部通信
cluster = tf.train.ClusterSpec({"worker": ["<VM_1>:2222",
"<VM_2>:2222"],
"ps": ["<IP_VM_1>:2223",
"<IP_VM_2>:2223"]})
其中第一件事情是Kubernetes资源调度非常擅长的事情,无论CPU和GPU调度,都是直接可以使用;而第二件事情是Docker擅长的,固化和可重复的操作保存到容器镜像。而自动化的构建ClusterSpec
是TFJob
解决的问题,让用户通过简单的集中式配置,完成TensorFlow分布式集群拓扑的构建。
应该说烦恼了数据科学家很久的分布式训练问题,通过Kubernetes+TFJob的方案可以得到比较好的解决。
利用Kubernetes和TFJob部署分布式训练
- 修改TensorFlow分布式训练代码
之前在阿里云上小试TFJob一文中已经介绍了TFJob
的定义,这里就不再赘述了。可以知道TFJob
里有的角色类型为MASTER
, WORKER
和 PS
。
举个现实的例子,假设从事分布式训练的TFJob
叫做distributed-mnist
, 其中节点有1个MASTER
, 2个WORKERS
和2个PS
,ClusterSpec
对应的格式如下所示:
{
"master":[
"distributed-mnist-master-0:2222"
],
"ps":[
"distributed-mnist-ps-0:2222",
"distributed-mnist-ps-1:2222"
],
"worker":[
"distributed-mnist-worker-0:2222",
"distributed-mnist-worker-1:2222"
]
}
而tf_operator
的工作就是创建对应的5个Pod, 并且将环境变量TF_CONFIG
传入到每个Pod中,TF_CONFIG
包含三部分的内容&#