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

簡單的方式創建分布式應用程序

開發 前端 分布式
Ray 是基于 Python 的分布式計算框架,采用動態圖計算模型,提供簡單、通用的 API 來創建分布式應用。使用起來很方便,你可以通過裝飾器的方式,僅需修改極少的的代碼,讓原本運行在單機的 Python 代碼輕松實現分布式計算,目前多用于機器學習。

[[420515]]

面對計算密集型的任務,除了多進程,就是分布式計算,如何用 Python 實現分布式計算呢?今天分享一個很簡單的方法,那就是借助于 Ray。

什么是 Ray

Ray 是基于 Python 的分布式計算框架,采用動態圖計算模型,提供簡單、通用的 API 來創建分布式應用。使用起來很方便,你可以通過裝飾器的方式,僅需修改極少的的代碼,讓原本運行在單機的 Python 代碼輕松實現分布式計算,目前多用于機器學習。

Ray 的特色:

1、提供用于構建和運行分布式應用程序的簡單原語。

2、使用戶能夠并行化單機代碼,代碼更改很少甚至為零。

3、Ray Core 包括一個由應用程序、庫和工具組成的大型生態系統,以支持復雜的應用程序。比如 Tune、RLlib、RaySGD、Serve、Datasets、Workflows。

安裝 Ray

最簡單的安裝官方版本的方式:

  1. pip install -U ray 
  2. pip install 'ray[default]' 

如果是 Windows 系統,要求必須安裝 Visual C++ runtime

其他安裝方式見官方文檔。

使用 Ray

一個裝飾器就搞定分布式計算:

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

先執行 ray.init(),然后在要執行分布式任務的函數前加一個裝飾器 @ray.remote 就實現了分布式計算。裝飾器 @ray.remote 也可以裝飾一個類:

  1. import ray 
  2. ray.init() 
  3.  
  4. @ray.remote 
  5. class Counter(object): 
  6.     def __init__(self): 
  7.         self.n = 0 
  8.  
  9.     def increment(self): 
  10.         self.n += 1 
  11.  
  12.     def read(self): 
  13.         return self.n 
  14.  
  15. counters = [Counter.remote() for i in range(4)] 
  16. tmp1 = [c.increment.remote() for c in counters] 
  17. tmp2 = [c.increment.remote() for c in counters] 
  18. tmp3 = [c.increment.remote() for c in counters] 
  19. futures = [c.read.remote() for c in counters] 
  20. 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、Azure、Kubernetes、阿里云、內部部署和 Staroid 上甚至在你的自定義節點提供商上使用集群啟動器。

Ray 集群還可以利用 Ray Autoscaler,它允許 Ray 與云提供商交互,以根據規范和應用程序工作負載請求或發布實例。

現在,我們來快速演示下 Ray 集群的功能,這里是用 Docker 來啟動兩個 Ubuntu 容器來模擬集群:

  • 環境 1: 172.17.0.2 作為 head 節點
  • 環境 2: 172.17.0.3 作為 worker 節點,可以有多個 worker 節點

具體步驟:

1. 下載 ubuntu 鏡像

  1. docker pull ubuntu 

2. 啟動 ubuntu 容器,安裝依賴

啟動第一個

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

啟動第二個

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

檢查下它們的 IP 地址:

  1. $ docker inspect -f "{{ .NetworkSettings.IPAddress }}" ubuntu-01 
  2. 172.17.0.2 
  3. $ docker inspect -f "{{ .NetworkSettings.IPAddress }}" ubuntu-02 
  4. 172.17.0.3 

然后分別在容器內部安裝 python、pip、ray

  1. apt update && apt install python3  
  2. apt install python3-pip 
  3. pip3 install ray 

3. 啟動 head 節點和 worker 節點

選擇在其中一個容器作為 head 節點,這里選擇 172.17.0.2,執行:

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

默認端口是 6379,你可以使用 --port 參數來修改默認端口,啟動后的結果如下:

忽略掉警告,可以看到給出了一個提示,如果要把其他節點綁定到該 head,可以這樣:

  1. ray start --address='172.17.0.2:6379' --redis-password='5241590000000000' 

在另一個節點執行上述命令,即可啟動 worker 節點:

如果要關閉,執行:

  1. ray stop 

4、執行任務

隨便選擇一個節點,執行下面的腳本,修改下 ray.init() 函數的參數:

  1. from collections import Counter 
  2. import socket 
  3. import time 
  4.  
  5. import ray 
  6.  
  7. ray.init(address='172.17.0.2:6379', _redis_password='5241590000000000'
  8.  
  9. print('''This cluster consists o    f 
  10.     {} nodes in total 
  11.     {} CPU resources in total 
  12. '''.format(len(ray.nodes()), ray.cluster_resources()['CPU'])) 
  13.  
  14. @ray.remote 
  15. def f(): 
  16.     time.sleep(0.001) 
  17.     # Return IP address. 
  18.     return socket.gethostbyname(socket.gethostname()) 
  19.  
  20. object_ids = [f.remote() for _ in range(10000)] 
  21. ip_addresses = ray.get(object_ids) 
  22.  
  23. print('Tasks executed'
  24. for ip_address, num_tasks in Counter(ip_addresses).items(): 
  25.     print('    {} tasks on {}'.format(num_tasks, ip_address)) 

執行結果如下:

可以看到 172.17.0.2 執行了 4751 個任務,172.17.0.3 執行了 5249 個任務,實現了分布式計算的效果。

最后的話

有了 Ray,你可以不使用 Python 的多進程就可以實現并行計算。今天的機器學習主要就是計算密集型任務,不借助分布式計算速度會非常慢,Ray 提供了簡單實現分布式計算的解決方案。官方文檔提供了很詳細的教程和樣例,感興趣的可以去了解下。

 

如果有幫助,不妨隨手一個關注,每天學點 Python 技術。

 

責任編輯:武曉燕 來源: Python七號
相關推薦

2021-04-30 16:54:27

分散式應用程序

2023-10-30 09:27:41

Docker程序

2022-03-15 19:19:04

分布式PostgreSQL集群

2022-03-14 19:40:40

PostgreSQL多租戶應用程序Citus

2023-11-16 17:27:44

Java分布式應用程序

2011-03-15 19:45:27

Windows Azu

2010-04-27 09:11:23

VS2010

2010-04-23 09:54:01

VS2010

2017-01-16 14:13:37

分布式數據庫

2018-04-03 16:24:34

分布式方式

2017-07-04 16:18:15

分布式云應用導圖

2023-09-22 08:00:00

分布式鎖Redis

2009-07-29 15:15:31

ASP應用程序

2009-10-09 16:13:16

VB開發分布式

2023-11-14 08:36:15

Celery工具

2018-12-14 10:06:22

緩存分布式系統

2019-06-19 15:40:06

分布式鎖RedisJava

2014-04-02 14:00:41

移動應用程序工具

2021-07-05 09:28:11

Flink分布式程序

2010-03-01 17:53:22

Python應用程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜a级理论片915影院 | 国产精品精品 | 91久久精品国产 | 久久精品福利视频 | 一级黄a | 日本成人在线网址 | av手机在线免费观看 | 日韩一区二区视频 | 天天看夜夜 | 久久最新网址 | 亚洲 一区| 最新av中文字幕 | 欧美性网站| 一区二区精品 | 成人av一区二区三区 | 日本天天操| 亚洲欧美日韩在线 | 国产精品久久精品 | 亚洲日韩视频 | 久久99国产精一区二区三区 | av黄色片在线观看 | 夜色www国产精品资源站 | 中文字幕国产精品 | 国产福利在线播放 | 一二三四在线视频观看社区 | 久久国产精品免费一区二区三区 | 国产精品一区二区欧美黑人喷潮水 | 国产精品久久久久久久久久久久午夜片 | 一区二区在线免费观看 | 国产高清在线 | 精品一区二区在线观看 | 久久久久免费精品国产小说色大师 | 亚洲激情一区二区 | 美女131mm久久爽爽免费 | 一区二区三区四区在线 | 久久精品a级毛片 | 久久精品一级 | 最新中文字幕 | 久久久久久久综合色一本 | 国产国拍亚洲精品av | 视频一区二区国产 |