はじめに
- rayとは → https://github.com/ray-project/ray
- 分散並列処理を簡単に書けるフレームワーク
ray.remoteは怖い
@ray.remote
が付された関数が使用するオブジェクトは, 呼び出される都度内部でray.put()
が呼ばれ, データがメモリ上に展開される- 若干この仕様が厄介で,
ray.get()
なんかを使うと, 同じオブジェクトを何度もメモリ上に展開してしまう- なので大量にremoteの関数を呼んだりすると, RAMを64GB積んでてもメモリ不足になったりする
solution
-
そういうわけで, サイズの大きいオブジェクトを渡したい場合は, 明示的に
ray.put()
を使って先にメモリ上に展開しておく- 特に, サーバを自動で建ててソケット通信するクラスなんかを扱っていると, 大量にプロセスが乱立するので注意
-
また,
class
内のオブジェクトに対してもray.put()
で明示確保すべき- というのも, どうやら
ray
ではself.hogehoge
系統も何度もメモリ展開してしまうらしい - 例えばこういう感じにすべき👇
- というのも, どうやら
|
|
example
|
|
👇👇👇
|
|