私は最近、仮想ロボット制御にニューラルネットワークを使用するプロジェクトに取り組んでいます。私はそれをコード化するためにテンソルフローを使用し、それはスムーズに実行されました。これまでのところ、シーケンシャルシミュレーションを使用してニューラルネットワークがどの程度優れているかを評価しましたが、時間を短縮するためにいくつかのシミュレーションを並行して実行したいデータを取得するために必要です。
これを行うには、Pythonのmultiprocessing
パッケージをインポートします。最初は、sess変数(sess=tf.Session()
)をシミュレーションを実行する関数に渡していました。ただし、このsess
変数を使用するステートメントに到達すると、警告なしでプロセスが終了します。少し探してみたところ、次の2つの投稿が見つかりました: Tensorflow:セッションをaに渡すpython multiprocess および 複数のtensorflowセッションを同時に実行する =
それらは非常に関連していますが、それを機能させる方法を理解することができませんでした。個々のプロセスごとにセッションを作成し、ニューラルネットの重みをトレーニング可能なパラメーターに割り当ててみましたが、成功しませんでした。また、セッションをファイルに保存してからプロセス内でロードしようとしましたが、そこでもうまくいきませんでした。
誰かがセッション(またはセッションのクローン)をいくつかのプロセスに渡すことができましたか?
ありがとう。
Kerasをラッパーとして使用し、tensorflowをバッキングとして使用しますが、同じ一般的な原則を適用する必要があります。
あなたがこのようなことをしようとすると:
import keras
from functools import partial
from multiprocessing import Pool
def ModelFunc(i,SomeData):
YourModel = Here
return(ModelScore)
pool = Pool(processes = 4)
for i,Score in enumerate(pool.imap(partial(ModelFunc,SomeData),range(4))):
print(Score)
失敗します。ただし、次のようなものを試した場合:
from functools import partial
from multiprocessing import Pool
def ModelFunc(i,SomeData):
import keras
YourModel = Here
return(ModelScore)
pool = Pool(processes = 4)
for i,Score in enumerate(pool.imap(partial(ModelFunc,SomeData),range(4))):
print(Score)
うまくいくはずです。プロセスごとにテンソルフローを個別に呼び出してみてください。
Python multiprocessingを使用してTensorFlow Session
をmultiprocessing.Pool
にまっすぐ進む方法で渡すことはできません。これは、Session
オブジェクトはpickleできないためです(基本的にシリアル化できません。 GPUメモリとそのような状態)。
actors を使用してコードを並列化することをお勧めします。これは基本的に「オブジェクト」の並列計算の類似体であり、分散設定で状態を管理するために使用されます。
Ray は、これを行うための優れたフレームワークです。 TensorFlow Session
を管理し、シミュレーションを実行するためのメソッドを公開するPythonクラスを定義できます。
import ray
import tensorflow as tf
ray.init()
@ray.remote
class Simulator(object):
def __init__(self):
self.sess = tf.Session()
self.simple_model = tf.constant([1.0])
def simulate(self):
return self.sess.run(self.simple_model)
# Create two actors.
simulators = [Simulator.remote() for _ in range(2)]
# Run two simulations in parallel.
results = ray.get([s.simulate.remote() for s in simulators])
RayでTensorFlowを並列化する の例をいくつか示します。
Rayのドキュメント を参照してください。私はRay開発者の一人であることに注意してください。