成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Ray輕松進行Python分布式計算

開發 前端
本文首先創建了四個矩陣,將它們分為兩組,對每組中的矩陣進行乘法運算,然后對每組的乘法結果進行求和。在這里,乘法運算是并行進行的,然后將結果聚合以獲得求和結果。

即使是具有多個CPU核心的單處理器計算機(處理器具有一個或多個核心,計算機具有一個或多個處理器),也會給人一種能夠同時運行多個任務的錯覺。當我們擁有多個處理器時,就可以真正以并行的方式執行計算。

一、并行計算與分布式計算的區別

并行計算在現代計算中非常有用,幾乎是必需的,目的是實現最大性能。開發者將運行時間較長的計算任務分成較小的塊,并將其分配給不同的處理器。這種策略使開發者能夠在相同的時間內進行更多的計算。對于構建基于GUI的應用程序,總是需要對系統進行并行設計,以便一個線程可以保持可用狀態以更新GUI并響應用戶輸入。

并行計算和分布式計算的區別在于,對于并行計算,多個處理器位于同一主板上。分布式計算則使用多臺計算機同時解決問題。現代分布式系統能夠在網絡(局域網/廣域網)上進行通信。分布式計算的優點在于其價格和可擴展性。如果開發者需要更多的計算能力,那么可以很輕松地添加更多的計算機。

從根本上講,并行計算和分布式計算的架構非常相似。主要區別在于分布式計算使用的是分布式內存空間,而不是共享內存空間。它具有能夠為開發者的應用程序提供統一邏輯(而不是物理)內存空間的軟件層,可以幫助開發者將為并行計算編寫的代碼應用于分布式計算。

在本文中將介紹如何使用開源Python庫Ray來幫助開發者進行并行和分布式計算,Ray將Pythonic函數和類轉換為分布式設置中的任務和角色。本文將只介紹函數的示例,但是類的概念非常相似。

二、使用pip安裝Ray

這將安裝支持儀表板+集群啟動器的Ray。

pip install 'ray[default]'

如果只想進行最小化安裝:

pip install -U ray

三、使用Ray進行并行計算任務

接下來執行一個示例,該示例使用concurrent.futures,并將其與使用ray執行相同任務的運行進行比較。

import time
import concurrent.futures


Stime = time.perf_counter()
tasks = []
sleepTimes = [0.1, 0.2, 0.1, 0.5, 0.7, 0.9, 0.5,
              0.4, 1.5, 1.3, 1.0, 0.3, 0.7, 0.6, 0.3, 0.8]
print(f"Total time of sleep: {sum(sleepTimes)} for {len(sleepTimes)} tasks")

def my_awesome_function(sleepTime=0.1):
    time.sleep(sleepTime)
    return f"Sleep time {sleepTime}"

all_results = []
with concurrent.futures.ProcessPoolExecutor() as executor:
    tasks = [executor.submit(my_awesome_function, sleep)
             for sleep in sleepTimes]

    for ff in concurrent.futures.as_completed(tasks):
        all_results.append(ff.result())


print(f"Finished in {time.perf_counter()-Stime:.2f}")

這將返回:

$ python test_ray.py 
Total time of sleep: 9.9 for 16 tasks 
Finished in 1.65

這項工作在順序執行時需要9.9秒完成。由于本文執行的是并行執行,因此在示例中只用了1.65秒就完成了這項工作。請注意,這個時間可能因為不同的計算機而有所不同。

現在使用Ray來完成同樣的工作。本文首先使用ray.init()初始化Ray。然后,裝飾器ray.remote將Python函數轉換為可以異步遠程執行的函數。它會立即返回N個可以并行執行的函數副本。

import time
import ray

import concurrent.futures


Stime = time.perf_counter()
tasks = []
sleepTimes = [0.1, 0.2, 0.1, 0.5, 0.7, 0.9, 0.5,
              0.4, 1.5, 1.3, 1.0, 0.3, 0.7, 0.6, 0.3, 0.8]
print(f"Total time of sleep: {sum(sleepTimes)} for {len(sleepTimes)} tasks")

# 初始化Ray。
ray.init()

@ray.remote #convert to a function that can be executed remotely and asynchronously
def my_awesome_function(sleepTime=0.1):
    time.sleep(sleepTime)
    return f"Sleep time {sleepTime}"

tasks = []
for sleep in sleepTimes:
    tasks.append(my_awesome_function.remote(sleep))

all_results = ray.get(tasks)
print(f"Finished in {time.perf_counter()-Stime:.2f}")

這將返回:

Total time of sleep: 9.9 for 16 tasks 
Finished in 3.18

由于存在一些開銷,會有一些延遲,但對于大型計算來說,這種延遲可以忽略不計。

四、大規模計算的聚合值

Ray可以輕松地用于聚合多個值,這對于構建需要跨多臺機器進行計算的大型應用程序非常重要。對于大規模計算,Ray可以將聚合的運行時間從線性改為對數。

接下來看一個示例:

import time
import ray
import numpy as np

Stime = time.perf_counter()

@ray.remote
def create_matrix(size):
    return np.random.normal(size=size)

@ray.remote
def multiply_matrices(x, y):
    return np.dot(x, y)

@ray.remote
def sum_matrices(x, y):
    return np.add(x, y)

m1 = create_matrix.remote([1000, 1000])
m2 = create_matrix.remote([1000, 1000])
m3 = create_matrix.remote([1000, 1000])
m4 = create_matrix.remote([1000, 1000])

m12 = multiply_matrices.remote(m1, m2)
m34 = multiply_matrices.remote(m3, m4)

a12_34 =  sum_matrices.remote(m12, m34)

## 結果
MM = ray.get(a12_34)


print(f"Finished in {time.perf_counter()-Stime:.2f}")

在上面的示例中,本文首先創建了四個矩陣,將它們分為兩組,對每組中的矩陣進行乘法運算,然后對每組的乘法結果進行求和。在這里,乘法運算是并行進行的,然后將結果聚合以獲得求和結果。

參考資料

  1. 【安裝Ray】:https://docs.ray.io/en/latest/ray-overview/installation.html
  2. Pierfederici, F. (2016). 《Distributed Computing with Python》. Journal of Physics A: Mathematical and Theoretical (Vol. 44, Issue 8). Packt Publishing Ltd.
責任編輯:武曉燕 來源: Python學研大本營
相關推薦

2021-09-09 15:45:17

機器學習人工智能Ray

2012-05-21 16:28:29

LinuxHadoop

2023-07-26 07:28:55

WebSocket服務器方案

2024-03-01 09:53:34

2017-09-01 05:35:58

分布式計算存儲

2021-03-23 22:43:09

Grafana Tem分布式跟蹤開源

2022-06-08 07:36:03

LocustKubernete微服務

2024-06-06 08:40:07

2024-09-12 14:50:08

2021-08-30 20:19:55

應用程序

2012-09-19 14:09:20

Hadoop開源

2019-10-28 10:10:01

技術研發分布式

2023-03-09 11:35:40

2013-03-26 13:43:08

Java分布式計算

2025-01-13 08:05:04

2010-06-03 18:54:57

Hadoop

2023-08-24 08:49:27

2021-04-15 11:04:13

云計算分布式邊緣計算邊緣計算

2021-09-07 09:26:13

Python 開發編程語言

2021-06-01 05:51:37

云計算并行計算分布式計算
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: a级免费视频 | 丁香婷婷久久久综合精品国产 | 久久久久无码国产精品一区 | 亚洲国产精品成人久久久 | 亚洲欧美日韩电影 | 欧美在线视频网 | 久久av一区二区三区 | 日韩午夜在线观看 | 亚洲成人免费在线观看 | 嫩草网| 亚洲一区二区三区在线 | 日韩电影一区二区三区 | 在线观看日本网站 | 成人欧美一区二区 | 中日韩欧美一级片 | 久久久91精品国产一区二区三区 | 中文字幕免费中文 | 中文在线一区二区 | 免费的色网站 | 日本天天操 | 欧美aa在线 | 综合色婷婷 | 国产精品久久久久久久久久久久 | 色本道 | 一区精品在线观看 | 日韩欧美在线一区 | 成人免费视频久久 | 不卡在线视频 | 欧美激情国产日韩精品一区18 | 免费视频一区二区 | 丝袜 亚洲 另类 欧美 综合 | 精品视频一区二区 | 日韩欧美不卡 | 国产成人久久精品 | 奇米影视在线 | 国产精品不卡一区二区三区 | 毛片视频观看 | 精久久| 国产一区二区三区在线视频 | 中文天堂在线一区 | 欧美一区二区三区视频在线观看 |