AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2023-11-02 09:09:39 313觀看
導讀即使是具有多個CPU核心的單處理器計算機(處理器具有一個或多個核心,計算機具有一個或多個處理器),也會給人一種能夠同時運行多個任務的錯覺。當我們擁有多個處理器時,就可以真正以并行的方式執行計算。一、并行計算與分布

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

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

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

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

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

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

二、使用pip安裝Ray

這將安裝支持儀表板+集群啟動器的Ray。z6N28資訊網——每日最新資訊28at.com

pip install 'ray[default]'

如果只想進行最小化安裝:z6N28資訊網——每日最新資訊28at.com

pip install -U ray

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

接下來執行一個示例,該示例使用concurrent.futures,并將其與使用ray執行相同任務的運行進行比較。z6N28資訊網——每日最新資訊28at.com

import timeimport concurrent.futuresStime = 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}")

這將返回:z6N28資訊網——每日最新資訊28at.com

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

這項工作在順序執行時需要9.9秒完成。由于本文執行的是并行執行,因此在示例中只用了1.65秒就完成了這項工作。請注意,這個時間可能因為不同的計算機而有所不同。z6N28資訊網——每日最新資訊28at.com

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

import timeimport rayimport concurrent.futuresStime = 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 asynchronouslydef 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}")

這將返回:z6N28資訊網——每日最新資訊28at.com

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

由于存在一些開銷,會有一些延遲,但對于大型計算來說,這種延遲可以忽略不計。z6N28資訊網——每日最新資訊28at.com

四、大規模計算的聚合值

Ray可以輕松地用于聚合多個值,這對于構建需要跨多臺機器進行計算的大型應用程序非常重要。對于大規模計算,Ray可以將聚合的運行時間從線性改為對數。z6N28資訊網——每日最新資訊28at.com

接下來看一個示例:z6N28資訊網——每日最新資訊28at.com

import timeimport rayimport numpy as npStime = time.perf_counter()@ray.remotedef create_matrix(size):    return np.random.normal(size=size)@ray.remotedef multiply_matrices(x, y):    return np.dot(x, y)@ray.remotedef 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}")

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

參考資料

  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.

本文鏈接:http://www.tebozhan.com/showinfo-26-16533-0.html使用Ray輕松進行Python分布式計算

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 彩虹橋架構演進之路-性能篇

下一篇: 七個殺手級IntelliJ IDEA插件

標簽:
  • 熱門焦點
  • Raft算法:保障分布式系統共識的穩健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統
  • 三言兩語說透設計模式的藝術-簡單工廠模式

    一、寫在前面工廠模式是最常見的一種創建型設計模式,通常說的工廠模式指的是工廠方法模式,是使用頻率最高的工廠模式。簡單工廠模式又稱為靜態工廠方法模式,不屬于GoF 23種設計
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 之家push系統迭代之路

    前言在這個信息爆炸的互聯網時代,能夠及時準確獲取信息是當今社會要解決的關鍵問題之一。隨著之家用戶體量和內容規模的不斷增大,傳統的靠"主動拉"獲取信息的方式已不能滿足用
  • 微軟邀請 Microsoft 365 商業用戶,測試視頻編輯器 Clipchamp

    8 月 1 日消息,微軟近日宣布即將面向 Microsoft 365 商業用戶,開放 Clipchamp 應用,邀請用戶通過該應用來編輯視頻。微軟于 2021 年收購 Clipchamp,隨后開始逐步整合到 Microsof
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對“勢”的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時代麒麟電池,容量為101kWh,電壓為726.7V,可以預測小
  • iQOO Neo8系列新品發布會

    旗艦雙芯 更強更Pro
Top