日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

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

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

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

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

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

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

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

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

二、使用pip安裝Ray

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

pip install 'ray[default]'

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

pip install -U ray

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

接下來執行一個示例,該示例使用concurrent.futures,并將其與使用ray執行相同任務的運行進行比較。Qhl28資訊網——每日最新資訊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}")

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

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

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

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

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

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

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

四、大規模計算的聚合值

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

接下來看一個示例:Qhl28資訊網——每日最新資訊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}")

在上面的示例中,本文首先創建了四個矩陣,將它們分為兩組,對每組中的矩陣進行乘法運算,然后對每組的乘法結果進行求和。在這里,乘法運算是并行進行的,然后將結果聚合以獲得求和結果。Qhl28資訊網——每日最新資訊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.www897cc.com/showinfo-26-16533-0.html使用Ray輕松進行Python分布式計算

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

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

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

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 8月總票房已突破10億!《封神》第一:口碑已經成了

    8月5日消息,據燈塔專業版數據,截至8月5日9時35分,8月總票房(含預售)已突破10億。其中,《封神》以大比分的優勢領先。根據官方消息,目前該片總票房已經超過14.
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • OPPO、vivo、小米等國內廠商Q2在印度智能手機市場份額依舊高達55%

    7月20日消息,據外媒報道,研究機構的報告顯示,在全球智能手機出貨量同比仍在下滑的大背景下,印度這一有潛力的市場也未能幸免,出貨量同比也有下滑,多家廠
  • 蘋果、三星、惠普等暫停向印度出口筆記本和平板電腦

    集微網消息,據彭博社報道,在8月3日印度突然禁止在沒有許可證的情況下向印度進口電腦/平板及顯示器等產品后,蘋果、三星電子和惠普等大公司暫停向印度
  • iQOO Neo8系列今日官宣:首發天璣9200+ 全球安卓最強芯!

    在昨日舉行的的聯發科新一代旗艦芯片天璣9200+的發布會上,iQOO官方也正式宣布,全新的iQOO Neo8系列新品將全球首發搭載這款當前性能最強大的移動平臺
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
Top 主站蜘蛛池模板: 赤壁市| 漾濞| 湾仔区| 金坛市| 永安市| 鹿邑县| 舞阳县| 宝坻区| 丹寨县| 通山县| 屏山县| 嘉荫县| 莒南县| 西安市| 漳平市| 高雄县| 包头市| 汝阳县| 梅州市| 五指山市| 湾仔区| 邵东县| 岳阳县| 姜堰市| 通辽市| 天水市| 陇西县| 阳春市| 黄骅市| 孟连| 盐源县| 鹤山市| 朝阳县| 西盟| 南京市| 武威市| 崇文区| 百色市| 弥渡县| 东港市| 武宁县|