Ray使用備注
框架介紹
- Ray是一種python分布式任務(wù)調(diào)度框架
- 其支持 無(wú)狀態(tài)的任務(wù)并發(fā)執(zhí)行,也支持 有狀態(tài)的任務(wù)按照一定順序執(zhí)行
- 其支持 分布式調(diào)度器,在一個(gè)節(jié)點(diǎn)上創(chuàng)建的任務(wù)先給本節(jié)點(diǎn)的局部調(diào)度器,并讓本節(jié)點(diǎn)自己處理,當(dāng)資源不夠時(shí),再將任務(wù)發(fā)給全局調(diào)度器供其他節(jié)點(diǎn)處理
- 其支持 分布式對(duì)象存儲(chǔ),同一個(gè)節(jié)點(diǎn)上的使用同一個(gè)對(duì)象存儲(chǔ)器,實(shí)現(xiàn)進(jìn)程間內(nèi)存共享
- 其支持 單節(jié)點(diǎn)部署及多節(jié)點(diǎn)集群部署;
簡(jiǎn)單用法
import ray
import time
ray.init()@ray.remote
def run_task():num = 1for item in range(1000):num = num * item**itemreturnif __name__ == '__main__':print('開始計(jì)時(shí)')start_time = time.time()result_ids = []for i in range(100):s1 = time.time()x_id = run_task.remote()print("發(fā)送任務(wù)到ray框架耗時(shí):", time.time() - s1, "s")result_ids.append(x_id)ray.get(result_ids)print("總耗時(shí)", time.time() - start_time, "s")
單節(jié)點(diǎn)部署及執(zhí)行方法
- A服務(wù)器 啟動(dòng)ray master服務(wù)(并指定使用cpu核數(shù)): ray start --head --num-cpus=36
- A服務(wù)器 執(zhí)行python壓測(cè)案例: python ray_use.py
- A服務(wù)器 關(guān)閉ray master服務(wù): ray stop
多節(jié)點(diǎn)部署及執(zhí)行方法
- A服務(wù)器 啟動(dòng)ray master服務(wù): ray start --head --num-cpus=36 --disable-usage-stats
- B服務(wù)器 啟動(dòng)ray salve服務(wù)(–address:指向master服務(wù)地址): ray start --num-cpus=2 --address=‘192.168.xxx.xxx:6379’
- A服務(wù)器 執(zhí)行python壓測(cè)案例: python ray_use.py
- B服務(wù)器 關(guān)閉ray salve服務(wù): ray stop
- A服務(wù)器 關(guān)閉ray master服務(wù): ray stop
使用注意事項(xiàng)
- ray框架本身在任務(wù)調(diào)度,異步執(zhí)行,跨進(jìn)程通信 等有所消耗,
- 因此 當(dāng)出現(xiàn) 集群部署和單節(jié)點(diǎn)部署 總體消耗時(shí)間相似,或使用ray比不使用總體耗時(shí)更長(zhǎng),
- 主要是因?yàn)?被調(diào)度的任務(wù)本身消耗資源較少,執(zhí)行時(shí)間較短導(dǎo)致的; 如 ray執(zhí)行remote()方法進(jìn)行異步調(diào)用耗時(shí)0.1ms,而 單個(gè)任務(wù)執(zhí)行耗時(shí)也要0.1ms,則使用ray耗時(shí)就要0.2s,得不償失;
- 這時(shí)說(shuō)明 ray框架不符合需求;
- 或者 將多個(gè)耗時(shí)較短的任務(wù)拼接在一個(gè)大的任務(wù)中,從而突出ray框架分布式高并發(fā)的優(yōu)勢(shì);
相關(guān)鏈接地址