1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

yarr で Python で numpy データをさくっと RPC 通信するメモ

Last updated at Posted at 2021-01-27

背景

numpy データ(画像データ, ボリュームデータなどサイズ大きめ)を RPC でやりとりしたい.

IPython, Jupyter-lab で C native module を autoreload するメモ
https://qiita.com/syoyo/items/0c633eda1a0bfdc31e3a

にあるように, 計算モジュールが native module になっており, リロードさせたいために Python プロセスを分けたいとか,

ぱぱっと numpy データを複数 PC に送って分散処理させたいときとか.

yarr がありました.

yarr

ありがとうございます. 普通に pip で入ります.

python -m pip install yarr

pure Python なので Windows でも動きます.

Linux, Windows で動作確認しました.
(ただ, Win server, Linux client の場合だと通信できませんでした. Win 側でポートを開けておかないとだめ?(client 側で connection error 出してくれない))

server

import yarr
import numpy

def proc_numpy(a):
    print(a)

# server
yarr.yarr(('localhost', 8000), [proc_numpy])

client

import yarr
import numpy

a = numpy.random.rand(256, 512, 512)

yarr.call(('localhost', 8000), 'proc_numpy', a)

Voila! :tada:

さくっと numpy データ送れました.

localhost Threadripper 1950X で試したところ, 256x512x512x8(sizeof(float64)) = 512 MB で 2 秒くらいでした. ネットワークだと帯域ネックになる(~2.5 G イーサくらいまで)ので, パフォーマンスには問題ないでしょう.

しくみ

中身としては struct module でエンコード/デコードして, socket 通信で送っているだけです.

コードも 100 行ちょっとなので, 必要に応じて自前で改変できます.

問題点

ライセンスの名前がよくない...(ライセンス自体は Public domain に近いのでよいので残念)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?