您的位置:首页 > 新闻 > 热点要闻 > 教案:Horovod on Ray

教案:Horovod on Ray

2025/1/9 15:55:41 来源:https://blog.csdn.net/weixin_41046245/article/details/139737556  浏览:    关键词:教案:Horovod on Ray

教案:Horovod on Ray

课程目标

  1. 了解Horovod与Ray的集成原理和优势。
  2. 学习如何在Ray集群上安装和配置Horovod。
  3. 掌握使用RayExecutor进行分布式训练的方法。
  4. 理解Ray的弹性执行特性及其在Horovod中的应用。

教学内容

1. Horovod on Ray简介
  • 集成目的
    • 结合Horovod的分布式训练优势与Ray的集群管理和弹性扩展能力。
    • 使用RayExecutor API进行分布式任务执行。
    • 目前仅支持Gloo后端。
2. 安装Horovod和Ray
  • 安装步骤
    $ HOROVOD_WITH_GLOO=1 ... pip install 'horovod[ray]'
    
  • 参考文档
    • Ray的高级安装说明:Ray安装文档
3. 使用RayExecutor进行分布式训练
  • 基本用法
    from horovod.ray import RayExecutor
    import ray# 启动或连接到现有Ray集群
    ray.init()# 在集群上启动num_workers个actor
    executor = RayExecutor(setting, num_workers=num_workers, use_gpu=True)
    executor.start()
    
  • 执行函数
    def simple_fn():hvd.init()print("hvd rank", hvd.rank())return hvd.rank()result = executor.run(simple_fn)
    assert len(set(result)) == hosts * num_slots
    executor.shutdown()
    
4. 状态执行
  • 支持有状态Actors
    import torch
    from horovod.torch import hvd
    from horovod.ray import RayExecutorclass MyModel:def __init__(self, learning_rate):self.model = NeuralNet()optimizer = torch.optim.SGD(self.model.parameters(),lr=learning_rate,)self.optimizer = hvd.DistributedOptimizer(optimizer)def get_weights(self):return dict(self.model.parameters())def train(self):return self._train(self.model, self.optimizer)ray.init()
    executor = RayExecutor(...)
    executor.start(executable_cls=MyModel)for i in range(5):executor.execute(lambda worker: worker.train())result = executor.execute(lambda worker: worker.get_weights())
    assert all(isinstance(res, dict) for res in result)
    
5. 弹性RayExecutor
  • 弹性执行
    $ ray up ray/python/ray/autoscaler/aws/example-full.yaml
    
    import horovod.torch as hvddef training_fn():hvd.init()model = Model()torch.cuda.set_device(hvd.local_rank())@hvd.elastic.rundef train(state):for state.epoch in range(state.epoch, epochs):...state.commit()state = hvd.elastic.TorchState(model, optimizer, batch=0, epoch=0)state.register_reset_callbacks([on_state_reset])train(state)returnimport ray
    from horovod.ray import RayExecutorray.init(address="auto")
    settings = RayExecutor.create_settings(verbose=True)
    executor = RayExecutor(settings, min_workers=1, use_gpu=True, cpus_per_slot=2)
    executor.start()
    executor.run(training_fn)
    
6. AWS集群启动
  • 集群配置
    cluster_name: horovod-cluster
    provider: {type: aws, region: us-west-2}
    auth: {ssh_user: ubuntu}
    min_workers: 3
    max_workers: 3head_node: {InstanceType: p3.2xlarge, ImageId: ami-0b294f219d14e6a82}
    worker_nodes: {InstanceType: p3.2xlarge, ImageId: ami-0b294f219d14e6a82}
    setup_commands:- HOROVOD_WITH_GLOO=1 HOROVOD_GPU_OPERATIONS=NCCL pip install horovod[ray]
    
  • 启动和监控集群
    $ ray up ray_cluster.yaml
    $ ray monitor ray_cluster.yaml
    

教学活动

  1. 讲解与讨论

    • 介绍Horovod与Ray的集成,讲解其动机和优势。
    • 演示基本的RayExecutor用法及其在分布式训练中的应用。
  2. 实践操作

    • 安装Horovod和Ray,并配置集群环境。
    • 修改现有的训练脚本以使用RayExecutor进行分布式训练。
  3. 案例分析

    • 使用RayExecutor进行有状态和无状态的分布式训练。
    • 配置和运行弹性RayExecutor。

课后作业

  1. 安装与配置

    • 安装Horovod和Ray,配置本地或云端集群环境。
  2. 代码实现

    • 修改现有的训练脚本,使用RayExecutor进行分布式训练,并分析其性能。
  3. 弹性训练

    • 配置弹性RayExecutor,并运行训练任务,记录和分析结果。

参考资料

  • Horovod官方文档
  • Ray官方文档
  • AWS集群启动文档

通过本次课程,学生将掌握Horovod与Ray的集成使用方法,能够在分布式环境中高效运行训练任务,并利用Ray的弹性特性进行自动扩展和资源管理。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com