1

私のMLモデルの処理バッチ処理に時間がかかり、並列化を検討しています。Python:GPUとCPUの作業を並列化する

現在、前処理ルーチンはSSDからデータを取得し、前処理して学習用のデータ構造を作成します。このすべてのMLトレーニングプロセスは待っています。その後、MLプロセスはこのデータを受け取り、モデルをトレーニングするためにこのデータを使用します。今は前処理待ちです。そして、彼らは回ります。この待ち時間はすばやくまとめられ、モデルトレーニングが遅れます。

計画は次のとおりです。単一のデータ構造では、データポイントの束が格納されます。各ステップでは、トレーニングアルゴリズムはモデルのトレーニングのためにランダムなサブセットを使用します(GPUでTensorFlowを使用するSGD)。

これと並行して、次のデータポイントの前処理を別のスレッドで実行したいと思います。また、前処理が準備ができたら、古いデータ構造オブジェクトを新しいものに置き換えます。その他

これはPythonでの並列化に対する私の最初のアプローチで、これはまったく機能するのだろうかと思います。グローバルな通訳者がロックすると、システムは本当に並行してこれらのタスクを実行できなくなりますか?

答えて

1

TensorFlowのPythonバインディングは、できるだけ早くグローバルインタプリタロックを解放することについて非常に勤勉です。たとえば、コントロールがtf.SessionrunメソッドでC++ライブラリに転送されたときにロックを保持しません。あなたが描いていることは、TensorFlowの非常に一般的なパターンです。前処理されたデータを使用して入力データの前処理とMLモデルのトレーニングは、TensorFlowでqueuesを使用して切り離されます。 Inception modelに入力プリプロセスとトレーニングがどのように並列化されているかを示す例があります。

関連する問題