基于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 个任务,实现了分布式计算的效果。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值