亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

利用Python?實現(xiàn)分布式計算

 更新時間:2022年05月07日 09:14:48   作者:??碼農君????  
這篇文章主要介紹了利用Python?實現(xiàn)分布式計算,文章通過借助于?Ray展開對分布式計算的實現(xiàn),感興趣的小伙伴可以參考一下

前言

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

什么是 Ray

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

Ray 的特色:

  • 1、提供用于構建和運行分布式應用程序的簡單原語。
  • 2、使用戶能夠并行化單機代碼,代碼更改很少甚至為零。
  • 3、Ray Core 包括一個由應用程序、庫和工具組成的大型生態(tài)系統(tǒng),以支持復雜的應用程序。比如 Tune、RLlib、RaySGD、Serve、Datasets、Workflows。

安裝 Ray

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

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

如果是 Windows 系統(tǒng),要求必須安裝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]

先執(zhí)行ray.init(),然后在要執(zhí)行分布式任務的函數(shù)前加一個裝飾器@ray.remote就實現(xiàn)了分布式計算。裝飾器@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]

當然了,上述的分布式計算依然是在自己的電腦上進行的,只不過是以分布式的形式。程序執(zhí)行的過程中,你可以輸入http://127.0.0.1:8265/#/查看分布式任務的執(zhí)行情況:

那么如何實現(xiàn) Ray 集群計算呢?接著往下看。

使用 Ray 集群

Ray 的優(yōu)勢之一是能夠在同一程序中利用多臺機器。當然,Ray 可以在一臺機器上運行,因為通常情況下,你只有一臺機器。但真正的力量是在一組機器上使用 Ray。

Ray 集群由一個頭節(jié)點和一組工作節(jié)點組成。需要先啟動頭節(jié)點,給 worker 節(jié)點賦予頭節(jié)點地址,組成集群:

你可以使用 Ray Cluster Launcher 來配置機器并啟動多節(jié)點 Ray 集群。你可以在 AWS、GCP、Azure、Kubernetes、阿里云、內部部署和 Staroid 上甚至在你的自定義節(jié)點提供商上使用集群啟動器。

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

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

  • 環(huán)境 1: 172.17.0.2 作為 head 節(jié)點
  • 環(huán)境 2: 172.17.0.3 作為 worker 節(jié)點,可以有多個 worker 節(jié)點

具體步驟:

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 節(jié)點和 worker 節(jié)點

選擇在其中一個容器作為 head 節(jié)點,這里選擇 172.17.0.2,執(zhí)行:

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

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

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

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

在另一個節(jié)點執(zhí)行上述命令,即可啟動 worker 節(jié)點:

如果要關閉,執(zhí)行:

ray?stop

4、執(zhí)行任務

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

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

執(zhí)行結果如下:

可以看到 172.17.0.2 執(zhí)行了 4751 個任務,172.17.0.3 執(zhí)行了 5249 個任務,實現(xiàn)了分布式計算的效果。

總結

有了 Ray,你可以不使用 Python 的多進程就可以實現(xiàn)并行計算。今天的機器學習主要就是計算密集型任務,不借助分布式計算速度會非常慢,Ray 提供了簡單實現(xiàn)分布式計算的解決方案。

到此這篇關于利用Python 實現(xiàn)分布式計算的文章就介紹到這了,更多相關Python 分布式計算內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python通用日志使用小結

    python通用日志使用小結

    日志則是程序中非常重要的一部分,它可以記錄程序運行中的異常、警告等信息,方便開發(fā)人員調試程序,本文就來介紹一下python通用日志使用小結,感興趣的可以了解一下
    2023-11-11
  • PyCharm:method may be static問題及解決

    PyCharm:method may be static問題及解決

    這篇文章主要介紹了PyCharm:method may be static問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • OpenCV半小時掌握基本操作之濾波器

    OpenCV半小時掌握基本操作之濾波器

    這篇文章主要介紹了OpenCV基本操作之濾波器,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Pytorch 解決自定義子Module .cuda() tensor失敗的問題

    Pytorch 解決自定義子Module .cuda() tensor失敗的問題

    這篇文章主要介紹了Pytorch 解決自定義子Module .cuda() tensor失敗的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 如何寫好?Python?的?Lambda?函數(shù)

    如何寫好?Python?的?Lambda?函數(shù)

    這篇文章主要介紹了如何寫好?Python?的?Lambda?函數(shù),Lambda?函數(shù)是?Python?中的匿名函數(shù),下面文章通過介紹Lambda?函數(shù)的相關內容展開文章主題,需要的小伙伴可以參考一下
    2022-03-03
  • python3中numpy函數(shù)tile的用法詳解

    python3中numpy函數(shù)tile的用法詳解

    今天小編就為大家分享一篇python3中numpy函數(shù)tile的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python八皇后問題的解決方法

    python八皇后問題的解決方法

    這篇文章主要為大家詳細介紹了python八皇后問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • python 讀寫、創(chuàng)建 文件的方法(必看)

    python 讀寫、創(chuàng)建 文件的方法(必看)

    下面小編就為大家?guī)硪黄猵ython 讀寫、創(chuàng)建 文件的方法(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 使用Python寫個小監(jiān)控

    使用Python寫個小監(jiān)控

    最近使用python寫了個小監(jiān)控,為什么使用python?簡單、方便、好管理,Python如何實現(xiàn)簡單的小監(jiān)控,感興趣的小伙伴們可以參考一下
    2016-01-01
  • python使用rpc框架gRPC的方法

    python使用rpc框架gRPC的方法

    這篇文章主要為大家詳細介紹了python使用rpc框架gRPC的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評論