PY-Ray
Python マルチ API
インストール
./00venv/bin/pip3 install --upgrade ray
起動方法
ヘッドノード(pythonスクリプトを起動するノード)
./00venv00/bin/ray start --head --port=6379
ワーカーノード
./00venv00/bin/ray start --address='<ヘッドノードのIP>:6379' ## ./00venv00/bin/ray start --address='192.168.21.201:6379'
firewalld への追加
# firewall-cmd --add-port=6379/tcp --zone=public
サンプル
pythonコードをヘッドノードで起動する
#!/bin/env python3
# -*- coding: utf-8 -*-
import ray
import time
@ray.remote
def worker_func(pid):
time.sleep(5)
return f"pid {pid} finished"
ray.init()
start = time.time()
results = [worker_func.remote(i) for i in range(20)]
print(ray.get(results))
print("Elapsed:", time.time() - start)
numba と Ray の混在(@njit をRayから呼び出す??)
#!/usr/bin/env python # -*- coding: utf-8 -*- import numpy as np from numba import njit import ray @njit(fastmath=True) def mz_centroid(_int_f, _mz_f): return ((_int_f/_int_f.sum()) * _mz_f).sum() @ray.remote def f(): a = np.random.random(10) b = 123 return mz_centroid(a, b) ray.init() results = ray.get([f.remote() for i in range(10)]) print(results)