Ray-分布式的SGD

本文详细介绍了Ray中同步分布随机梯度下降(SGD)的实现,该实现与Horovod和分布式TensorFlow相当。Ray SGD利用Ray的任务和参与者抽象,方便与现有Ray应用集成。文中涵盖接口定义、实例演示以及性能表现,展示了如何在Ray上实现高效的分布式SGD训练。
摘要由CSDN通过智能技术生成

本篇主要介绍Ray中同步分布随机梯度下降( synchronous distributed stochastic gradient descent SGD)的实现,它在性能上与Horovod和分布式TensorFlow中的实现相同。
Ray SGD构建在Ray任务和参与者抽象之上,以提供与现有Ray应用程序的无缝集成。

1.接口

要使用Ray SGD,定义一个模型类:

class ray.experimental.sgd.Model

您的类必须实现与Ray SGD一起使用的这个接口。
这支持任何形式的输入通道:由您使用TensorFlow定义它。有关示例实现,请参见tfbench/test_model.py
然后,将模型创建器函数传递给ray.experimental.sgd.DistributedSGD类。为了驱动分布式训练,可以重复调用sgd.step():

model_creator = lambda worker_idx, device_idx: YourModelClass()

sgd = DistributedSGD(
    model_creator,
    num_workers=2,
    devices_per_worker=4,
    gpu=True,
    strategy="ps")

for i in range(NUM_ITERS):
    sgd.step()

在底层,Ray SGD将在分配给worker(worker的数量由num_workers控制)的每个硬件设备(GPU)上创建模型的副本。每个工作进程可以管理多个设备(worker进程数量由devices_per_worker控制)。每个模型实例将位于单独的TF变量范围内。DistributedSGD类协调梯度的分布式计算和应用,以改进模型。

以下是两种可用的分布式SGD策略:

  • strategy="simple": 梯度在应用于每个模型副本之前,在驱动程序上集中平均。这是一个用于调试目的的参考实现。
  • strategy="ps"::在每个节点中计算梯度并取平均值。然后,通过一些参数服务器参与者对节点间的梯度进行平均。为了在网络中传输梯度计算和传输,我们使用了一个自定义的TensorFlow op,它可以直接读写Ray对象存储。

注意,当num_workers=1时,只使用局部allreduce,而选择分布式策略是不相关的。

DistributedSGD的完整文档如下:

class ray.experimental.sgd.DistributedSGD(model_creator, num_workers, devices_per_worker, gpu=True, strategy=‘ps’, grad_shard_bytes=10000000, all_reduce_alg=‘simple’)

使用Ray实现分布式SGD试验。
这支持两种模式:“simple”:集中式梯度聚合“ps”:分片参数服务器实现

要使用这个类,您必须实现model. py:Model。

参数:
	model_creator (func) –函数,该函数返回给定worker 和设备索引作为参数的模型。每个模型副本将在它自己的变量范围内创建。
	num_workers (int) –用于SGD的Ray actors 数。
	devices_per_worker (int) – 每个worker使用的GPU或CPU设备的数量。每个设备将创建一个模型副本。
	gpu (bool) – 是否使用GPU设备。
	s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值