基于Ray框架的分布式计算的实现

目录

Ray是什么?

Ray的特性

使用Ray集群

1、安装Docker

2、下载ubuntu镜像 

3、启动两个ubuntu容器

4、容器环境配置

5、启动head节点

6、启动worker节点

 7、执行任务

Ray是什么?

Ray是一个开源的Python分布式计算框架,它提供了一种用于构建并行和分布式应用的模型,其在分布式机器学习、深度学习、强化学习等领域得到了广泛的应用,也被用于构建大规模数据处理和分析的分布式应用程序。

Ray的特性

1、允许用户将任务并行化,将大型任务拆分成小任务,并在集群上的多个节点上并行执行,以充分利用计算资源。

2、提供了分布式对象的概念,允许用户在不同的节点上共享和访问数据,这样可以更方便地在分布式系统中处理大规模数据。

3、Ray自动处理任务的调度和资源管理,无需手动指定任务在集群中的位置,简化了开发者的工作。

使用Ray集群

将Ray部署在多个计算节点上,以共同处理任务并利用集群的计算资源。

在Ray集群中,需要有一个主节点(head node)和多个工作节点(worker nodes)。需要先启动头节点,给工作节点赋予头节点地址,组成集群。

 在本次demo中,我们将利用Docker启动两个Ubuntu容器来模拟集群,以下是具体步骤

1、安装Docker

可以参考小鱼的一键安装:

小鱼的一键安装系列 | 鱼香ROS (fishros.org.cn)

2、下载ubuntu镜像 

docker pull ubuntu

3、启动两个ubuntu容器

启动第一个,命名为ubuntu-01

docker run -it --name ubuntu-01 ubuntu /bin/bash

ctrl+p+q退出容器

启动第二个,命名为ubuntu-02

docker run -it --name ubuntu-02 ubuntu /bin/bash

 ctrl+p+q退出容器

检查容器的ip地址,这里两个 ubuntu容器默认使用bridge网络

docker network inspect bridge

找到"Containers"部分,如图所示

ubuntu-01:172.17.0.2

ubuntu-02:172.17.0.3

4、容器环境配置

分别进入两个容器,安装python、pip、ray

apt update && apt install python3 
apt install python3-pip
pip3 install ray

5、启动head节点

选择其中一个容器作为head节点,这里选择ubuntu-01,其ip地址为172.17.0.2

查看容器ID

docker ps

 进入容器ubuntu-01,注意使用自己容器的ID

docker attach 8a17e76115ae

执行

ray start --head --node-ip-address 172.17.0.2

默认端口6379,执行结果如下

 可以在Next steps中看到有关下一步的提示

ctrl+p+q退出容器

6、启动worker节点

进入另一个容器ubuntu-02,同样注意自己容器ID

docker attach 977c0e570cb3

执行

ray start --address='172.17.0.2:6379' --redis-password='5241590000000000'

 7、执行任务

任意选择一个容器执行任务,由于我们当前还在ubuntu-02容器中,所以直接在这里执行

首先安装vim编辑器

apt install vim

进入home目录下

cd /home

创建脚本

vim ray_demo.py

按 i 进入编辑模式

输入以下代码,注意修改ray.init()函数中的ip地址,与自己head节点所在的ip地址保持一致,端口未指定则默认6379

from collections import Counter
import socket
import time

import ray

ray.init(address='172.17.0.2:6379', _redis_password='5241590000000000')

print('''This cluster consists o    f
    {} nodes in total
    {} CPU resources in total
'''.format(len(ray.nodes()), ray.cluster_resources()['CPU']))

@ray.remote
def f():
    time.sleep(0.001)
    # Return IP address.
    return socket.gethostbyname(socket.gethostname())

object_ids = [f.remote() for _ in range(10000)]
ip_addresses = ray.get(object_ids)

print('Tasks executed')
for ip_address, num_tasks in Counter(ip_addresses).items():
    print('    {} tasks on {}'.format(num_tasks, ip_address))

按 Esc 退出编辑模式

输入 :wq 保存退出

运行脚本

python3 ray_demo.py

执行结果如下

可以看到 172.17.0.2 执行了 4292 个任务,172.17.0.3 执行了 5708 个任务,实现了分布式计算的效果。 

Ray框架是一个开源的分布式计算框架,可以用于构建高效的分布式应用程序和并发编程实践。它支持Python和Java语言,并提供了一组API和工具,使得构建分布式应用程序更加轻松。下面将对Ray框架分布式计算和并发编程实践进行深入解析。 分布式计算Ray框架分布式计算能力是其最重要的特点之一。它基于Actor模型,将应用程序分解为多个独立的Actor,每个Actor都有自己的状态和行为。这些Actor可以在集群中的多个节点之间进行通信和协作,实现分布式计算。 在Ray框架中,应用程序可以通过创建Actor来并发执行任务。Actor之间可以相互调用,也可以异步执行任务,从而实现高效的分布式计算Ray框架还提供了一些工具,如任务调度器和资源管理器,以确保任务在集群中的各个节点之间具有高可用性和负载均衡性。 并发编程实践: Ray框架还提供了一些有用的API和工具,可以帮助开发人员更轻松地实现并发编程。其中最重要的特点之一是Actor之间的消息传递。开发人员可以使用简单的API向Actor发送消息,并在Actor之间共享数据。这样可以避免使用锁和同步机制,从而提高应用程序的性能和可伸缩性。 此外,Ray框架还提供了一些有用的工具,如调试器和性能分析器,可以帮助开发人员更轻松地调试和分析应用程序的行为。这些工具可以帮助开发人员找到应用程序中的性能瓶颈和错误,并采取相应的措施来解决它们。 总结: Ray框架是一个强大的分布式计算框架,可以用于构建高效的分布式应用程序和并发编程实践。它支持Python和Java语言,并提供了一组API和工具,使得构建分布式应用程序更加轻松。Ray框架基于Actor模型,可以实现高效的消息传递和共享数据,从而避免使用锁和同步机制,提高应用程序的性能和可伸缩性。Ray框架还提供了一些有用的工具,如调试器和性能分析器,可以帮助开发人员更轻松地调试和分析应用程序的行为。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值