返回顶部
首页 > 资讯 > 后端开发 > Python >利用Python 实现分布式计算
  • 579
分享到

利用Python 实现分布式计算

2024-04-02 19:04:59 579人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言什么是 Ray安装 Ray使用 Ray使用 Ray 集群1. 下载 ubuntu 镜像2. 启动 ubuntu 容器,安装依赖3. 启动 head 节点和 worker 节点

前言

面对计算密集型的任务,除了多进程,就是分布式计算,如何用 python 实现分布式计算呢?今天分享一个很简单的方法,那就是借助于 Ray。

什么是 Ray

Ray 是基于 Python 的分布式计算框架,采用动态图计算模型,提供简单、通用的 api 来创建分布式应用。使用起来很方便,你可以通过装饰器的方式,仅需修改极少的的代码,让原本运行在单机的 Python 代码轻松实现分布式计算,目前多用于机器学习

Ray 的特色:

  • 1、提供用于构建和运行分布式应用程序的简单原语。
  • 2、使用户能够并行化单机代码,代码更改很少甚至为零。
  • 3、Ray Core 包括一个由应用程序、库和工具组成的大型生态系统,以支持复杂的应用程序。比如 Tune、RLlib、RaySGD、Serve、Datasets、Workflows。

安装 Ray

最简单的安装官方版本的方式:

pip install -U ray
pip install 'ray[default]'

如果是 windows 系统,要求必须安装Visual c++ runtime

使用 Ray

一个装饰器就搞定分布式计算:

import ray
ray.init()
@ray.remote
def f(x):
    return x * x
futures = [f.remote(i) for i in range(4)]
print(ray.get(futures)) # [0, 1, 4, 9]

先执行ray.init(),然后在要执行分布式任务的函数前加一个装饰器@ray.remote就实现了分布式计算。装饰器@ray.remote也可以装饰一个类:

import ray
ray.init()

@ray.remote
class Counter(object):
    def __init__(self):
        self.n = 0
    def increment(self):
        self.n += 1
    def read(self):
        return self.n
counters = [Counter.remote() for i in range(4)]
tmp1 = [c.increment.remote() for c in counters]
tmp2 = [c.increment.remote() for c in counters]
tmp3 = [c.increment.remote() for c in counters]
futures = [c.read.remote() for c in counters]
print(ray.get(futures)) # [3, 3, 3, 3]

当然了,上述的分布式计算依然是在自己的电脑上进行的,只不过是以分布式的形式。程序执行的过程中,你可以输入Http://127.0.0.1:8265/#/查看分布式任务的执行情况:

那么如何实现 Ray 集群计算呢?接着往下看。

使用 Ray 集群

Ray 的优势之一是能够在同一程序中利用多台机器。当然,Ray 可以在一台机器上运行,因为通常情况下,你只有一台机器。但真正的力量是在一组机器上使用 Ray。

Ray 集群由一个头节点和一组工作节点组成。需要先启动头节点,给 worker 节点赋予头节点地址,组成集群:

你可以使用 Ray Cluster Launcher 来配置机器并启动多节点 Ray 集群。你可以在 AWS、GCP、Azurekubernetes阿里云、内部部署和 Staroid 上甚至在你的自定义节点提供商上使用集群启动器。

Ray 集群还可以利用 Ray Autoscaler,它允许 Ray 与云提供商交互,以根据规范和应用程序工作负载请求或发布实例。

现在,我们来快速演示下 Ray 集群的功能,这里是用 Docker 来启动两个 Ubuntu 容器来模拟集群:

  • 环境 1: 172.17.0.2 作为 head 节点
  • 环境 2: 172.17.0.3 作为 worker 节点,可以有多个 worker 节点

具体步骤:

1. 下载 ubuntu 镜像

docker pull ubuntu

2. 启动 ubuntu 容器,安装依赖

启动第一个

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

启动第二个

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

检查下它们的 IP 地址:

$ docker inspect -f "{{ .networkSettings.IPAddress }}" ubuntu-01
172.17.0.2
$ docker inspect -f "{{ .NetworkSettings.IPAddress }}" ubuntu-02
172.17.0.3

然后分别在容器内部安装 python、pip、ray

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

3. 启动 head 节点和 worker 节点

选择在其中一个容器作为 head 节点,这里选择 172.17.0.2,执行:

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

默认端口是 6379,你可以使用 --port 参数来修改默认端口,启动后的结果如下:

忽略掉警告,可以看到给出了一个提示,如果要把其他节点绑定到该 head,可以这样:

ray start --address='172.17.0.2:6379' --Redis-passWord='5241590000000000'

在另一个节点执行上述命令,即可启动 worker 节点:

如果要关闭,执行:

ray stop

4、执行任务

随便选择一个节点,执行下面的脚本,修改下 ray.init() 函数的参数:

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))

执行结果如下:

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

总结

有了 Ray,你可以不使用 Python 的多进程就可以实现并行计算。今天的机器学习主要就是计算密集型任务,不借助分布式计算速度会非常慢,Ray 提供了简单实现分布式计算的解决方案。

到此这篇关于利用Python 实现分布式计算的文章就介绍到这了,更多相关Python 分布式计算内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 利用Python 实现分布式计算

本文链接: https://lsjlt.com/news/117705.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 利用Python 实现分布式计算
    目录前言什么是 Ray安装 Ray使用 Ray使用 Ray 集群1. 下载 ubuntu 镜像2. 启动 ubuntu 容器,安装依赖3. 启动 head 节点和 worker 节点...
    99+
    2024-04-02
  • 利用Python+Redis实现分布式锁
    利用Python+Redis实现分布式锁 欢迎一起交流技术:一个人可以走的很快,但是一群人却可以走的更远。 常见关系型数据库(Oracle+MySQL+PG+GP)+高可用企业解...
    99+
    2024-04-02
  • PHP中使用Redis实现分布式计算
    在分布式系统中,为了提高系统性能和可扩展性,常常需要将计算任务分配到多个计算节点上进行处理。这时候,使用缓存系统来协调这些节点之间的计算任务是一种常见的方法。在这种方法中,当一个节点需要计算一个任务时,它会检查本地缓存是否已经有了这个结果,...
    99+
    2023-05-16
    PHP redis 分布式计算
  • Python中的Numpy库:如何实现分布式计算?
    Numpy库是Python中用于科学计算的一个强大工具,它提供了高效的数组操作和数学函数,使得在Python中进行科学计算变得更加容易。但是,在大规模数据处理时,单个计算机的计算能力可能会受到限制。因此,如何在分布式环境下使用Numpy库...
    99+
    2023-10-14
    分布式 windows numpy
  • Java中怎么实现分布式计算
    Java中怎么实现分布式计算,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。远程过程调用的设计要创建出4种东西:服务器、客户端、服务器辅助设施和客户端辅助设施.创...
    99+
    2023-06-17
  • hadoop中分布式计算如何实现
    Hadoop中的分布式计算是通过将数据分片存储在多台计算机上,并同时在这些计算机上执行数据处理操作来实现的。Hadoop框架中有两个...
    99+
    2024-03-13
    hadoop
  • Java如何实现分布式实时计算?
    随着互联网时代的到来,数据量呈现爆炸性增长,如何高效地处理这些数据成为了每个企业必须面对的问题。分布式计算是一种解决大规模数据处理的有效方法。本文将介绍Java如何实现分布式实时计算,并且通过演示代码,让读者更好地理解。 一、分布式实时计...
    99+
    2023-10-17
    numy 分布式 实时
  • Unix系统如何实现分布式计算?
    在计算机科学领域中,分布式计算是一个重要的概念。它是指将一个计算任务分配给多台计算机处理,从而提高计算效率和处理能力。而Unix系统,作为一个开源的操作系统,也提供了一些方法来实现分布式计算。 一、使用SSH进行分布式计算 SSH(Sec...
    99+
    2023-09-10
    unix 分布式 javascript
  • 如何使用Redis实现分布式计算功能
    如何使用Redis实现分布式计算功能引言:随着互联网技术的快速发展,越来越多的应用程序需要处理大规模的数据和复杂的计算。在传统的单机计算环境下,处理这些任务可能会变得非常困难和低效。为了充分利用分布式系统的优势,一种常见的解决方案是将计算任...
    99+
    2023-11-07
    计算 分布式 redis
  • 如何使用Java实现分布式计算中的numy算法?
    Java是一种流行的编程语言,它在分布式计算中非常有用。在分布式计算中,numpy算法是一种非常常见的算法。本篇文章将向您介绍如何使用Java实现分布式计算中的numpy算法。 numpy算法是一种用于处理多维数组的算法。在分布式计算中,n...
    99+
    2023-10-09
    分布式 关键字 numy
  • 如何使用 PHP 容器实现实时分布式计算?
    PHP 是一种广泛使用的 Web 编程语言,被用于创建各种类型的应用程序。随着分布式计算的需求日益增长,开发人员需要寻找一种方便快捷的方法来实现这一目标。PHP 容器是一种可以帮助开发人员实现实时分布式计算的工具。在本文中,我们将介绍如何使...
    99+
    2023-07-28
    容器 分布式 实时
  • 如何在Java中实现分布式实时计算?
    随着数据量的增长,传统的单机实时计算已经无法满足业务需求。分布式实时计算能够将计算任务分散到多台机器上,从而提高计算效率和可靠性。本文将介绍如何使用Java实现分布式实时计算。 一、什么是分布式实时计算? 分布式实时计算是指将一个大任务分...
    99+
    2023-06-07
    关键字 分布式 实时
  • 利用Redis实现分布式限流
    标题:利用Redis实现分布式限流正文:随着互联网的快速发展,网站和服务的并发访问量不断增加,为了保护后端系统的稳定性,限制并发访问量成为了一项重要的任务。在分布式系统中,为了保证多个服务实例之间的共享状态,我们可以使用Redis作为分布式...
    99+
    2023-11-07
    分布式 redis 限流
  • 如何实现PHP底层的分布式计算
    如何实现PHP底层的分布式计算随着互联网的快速发展,分布式计算变得越来越重要。而对于PHP开发者来说,实现PHP底层的分布式计算是一个有挑战性的任务。本文将介绍如何使用PHP进行分布式计算,并提供一些具体的代码示例。分布式计算是将一个复杂的...
    99+
    2023-11-08
    底层 PHP 分布式计算
  • 怎么用RMI实现基于Java的分布式计算
    这篇文章将为大家详细讲解有关怎么用RMI实现基于Java的分布式计算,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java 2 Enterprise Edition(J2EE)远程方法调用(Remote ...
    99+
    2023-06-03
  • 如何使用Python打包数据类型来实现分布式计算?
    Python是一种非常强大的编程语言,其强大的数据类型系统使其成为处理大数据集的理想选择。在分布式计算中,Python的数据类型系统可以帮助我们在不同计算节点之间传递数据。在本文中,我们将介绍如何使用Python打包数据类型来实现分布式计算...
    99+
    2023-11-06
    打包 数据类型 分布式
  • PHP中利用Redis实现分布式锁
    随着互联网的快速发展,网站访问量的急剧增加,分布式系统的重要性也逐渐凸显出来。在分布式系统中,不可避免地涉及到并发同步以及数据一致性的问题。而分布式锁,作为一种解决并发同步问题的手段,也逐渐被广泛应用于分布式系统中。在PHP中,可以利用Re...
    99+
    2023-05-15
    PHP redis 分布式锁
  • 二维码在分布式系统中的应用,Python如何实现分布式计算和数据交互?
    随着互联网技术的发展,分布式系统已经成为了现代计算机系统的重要组成部分。在分布式系统中,多个计算机节点通过网络连接,共同完成一项任务。在这个过程中,数据交互和计算协作是必不可少的环节。而二维码正是一种非常便捷的数据交互方式,也可以在分布式...
    99+
    2023-10-02
    关键字 二维码 分布式
  • 利用Redis实现分布式消息发布订阅
    利用Redis实现分布式消息发布订阅在分布式系统中,消息的发布和订阅是常用的通信模式。在这个模式下,消息发布者将消息发送给一个或多个主题,订阅者则订阅感兴趣的主题,并接收相应的消息。为了实现这个模式,我们可以借助Redis这个高性能的内存数...
    99+
    2023-11-07
    分布式 redis 消息订阅
  • PHP分布式异步编程:如何在Linux系统中实现分布式计算?
    PHP是一种流行的服务器端编程语言,广泛应用于Web开发。但是,PHP也可以用于分布式计算,通过将计算任务分配给多台计算机来加速计算。本文将介绍如何在Linux系统中使用PHP进行分布式异步编程。 一、什么是分布式计算? 分布式计算是一种...
    99+
    2023-11-07
    分布式 异步编程 linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作