分布式Tensorflow由高性能的gRPC库底层技术支持,可以参照Martin Abadi、Ashish Agarwal、Paul Barham论文《Tensorflow:Large-Scale Machine Learning on Heterogeneous Distributed Systems》。

分布式集群

通常的部署方式有:单机多卡、多机多卡。

单机多卡是指,单台服务器有多块GPU。

当单机单GPU训练,数据会一个批次一个批次(batch)训练。

当单机多GPU训练,一次处理多个批次数据,而每个GPU处理一个批次数据。此时,变量参数保存在CPU,数据由CPU分发给多个GPU;GPU会计算每个批次从而更新梯度。CPU会收集完多个GPU的更新梯度,从而计算平均梯度,进而更新参数。因此,处理速度取决于最慢的GPU速度。

分布式,训练在多个工作节点(worker)。当数据量大,超过一台机器处理能力,需要采用分布式。

分布式可以采用单工作节点部署,或者是多工作节点部署。

单工作节点部署,每台服务器运行一个工作节点,服务器有多个GPU,该工作节点可以访问多块GPU。

此时,可以通过tf.device() 指定运行操作设备,优点是,单机多GPU间通信效率高;缺点是,需要通过代码指定设备。

多工作节点部署,每台服务器运行多个工作节点。通过设置CUDA_VISIBLE_DEVICES环境变量,限制各个工作节点只可以看到一个GPU。通过tf.device() 指定特定GPU。优点是,代码简单,提高GPU使用率;缺点是,工作节点通信。

CUDA_VISIBLE_DEVICES='' python ./distributed_supervisor.py --ps_hosts=127.0.0.1:2222,127.0.0.1:2223 --worker_hosts=127.0.0.1:2224,127.0.0.1:2225 --job_name=ps --task_index=0
CUDA_VISIBLE_DEVICES='' python ./distributed_supervisor.py --ps_hosts=127.0.0.1:2222,127.0.0.1:2223 --worker_hosts=127.0.0.1:2224,127.0.0.1:2225 --job_name=ps --task_index=1
CUDA_VISIBLE_DEVICES='0' python ./distributed_supervisor.py --ps_hosts=127.0.0.1:2222,127.0.0.1:2223 --worker_hosts=127.0.0.1:2224,127.0.0.1:2225 --job_name=worker --task_index=0
CUDA_VISIBLE_DEVICES='1' python ./distributed_supervisor.py --ps_hosts=127.0.0.1:2222,127.0.0.1:2223 --worker_hosts=127.0.0.1:2224,127.0.0.1:2225 --job_name=worker --task_index=1

分布式Tensorflow集群由两种类型的服务器组成:

  • 参数服务器(ps)

  • 计算服务器(worker)

两种服务器通过高性能的gRPC库作通信,其中ps用于管理并保存神经网络参数取值;worker负责计算参数的梯度。

模型更新方式

在并行训练中,更新模型的方式有两种:同步更新和异步更新。

在同步更新模式下,所有服务器都会统一读取参数的取值,计算参数的梯度,最后统一更新。

在异步更新模式下,不同服务器会自行读取参数,计算梯度并更新参数,而不需要与其他服务器同步。

模型训练启动方式

而启动分布式深度学习模型训练任务,也有两种模型:

  • 图内拷贝模式(In-graph Replication)

  • 图间拷贝模式(Between-graph replication)

Tensorflow本身只是计算框架,在将其应用到生产环境时,还需要集群管理工具的资源调度、监控,以及对生命周期的管理等。

在Tensorflow的官方文档有介绍如何在kubernetes上部署和使用Tensorflow集群。

【参考】

1。k8s部署和使用tensorflow集群:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/dist_test?spm=a2c4e.11153959.blogcont68337.18.690c27bbIzCfmP\

2。SegamentFault:https://segmentfault.com/a/1190000011943200

results matching ""

    No results matching ""