Python スクリプトを使用して、4D 画像 (機能的 MRI スキャン) から情報を操作および抽出しています。分析の一部は、マルチプロセッシング パッケージを使用して (被験者ごとに) 並行して実行するように設定されています。
pool = Pool(processes=numberCores)
resultList = pool.map(SubjectProcesser, argList) # where arglist is the list of arguments passed to the process
これらは、さまざまな種類のファイルとさまざまな種類の分析に適用されます。特定のタイプの分析で、次のエラーが発生します。
Process PoolWorker-1:
Traceback (most recent call last):
File "/home2/user/epd/epd-7.2-2-rh5-x86_64/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/home2/user/epd/epd-7.2-2-rh5-x86_64/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "/home2/surchs/epd/epd-7.2-2-rh5-x86_64/lib/python2.7/multiprocessing/pool.py", line 99, in worker
put((job, i, result))
File "/home2/user/epd/epd-7.2-2-rh5-x86_64/lib/python2.7/multiprocessing/queues.py", line 392, in put
return send(obj)
IOError: bad message length
失敗するところまで絞り込みました。並列プロセスは明らかに正常に実行されます (スクリプトのさまざまな段階でさまざまなデバッグ出力を見て判断します) が、結果の再マッピング中にエラーが発生します。
このエラー メッセージを検索しましたが、まだ解決策が見つかりません。私のスクリプトは他のすべてのタイプの分析で機能するため、何が起こっているのか疑問に思っています。
これが問題に関与していると思うので、分析について少し
さまざまな分析は、多かれ少なかれ脳内のボクセルの時系列抽出です (4 番目の次元として時間を含む 3D マトリックスとしての脳を想像してください。マトリックス要素はボクセルと呼ばれます)。脳内の任意のポイントには、すべての時点で活性化値があります。時系列は、時間の経過に伴う特定のボクセルのすべてのアクティベーション値のベクトルです。
次に、すべてのボクセル間の相関係数を計算し (ボクセルごとの次元の正方相関行列が得られます)、すべての相関係数のベクトル (行列の下三角) を並列処理の出力として返します。
エラーをスローしないすべての分析について、(地域ノードに基づいて) 複数のボクセルを平均化し、この地域の平均時系列を使用して、2 つのことを効果的に実行しています。
- ボクセルの数を (領域の数まで) 大幅に削減
- 常にゼロであるボクセルを取り除きます (平均化の結果として。ゼロのボクセルのみを含む領域はありません)。
対照的に、上記のエラーを与える分析は、脳内のすべてのボクセル時系列を使用するため、はるかに大きな相関行列が得られます。
すべての被験者ファイルをマスクしてゼロボクセルを取り除こうとしましたが、「ゼロ除算」エラーも発生していませんが、考えられるのはこれらの2つだけです。
また、前述のように、処理の並列部分は問題なく実行されます。おそらく結果の再マッピング中に、実行後にエラーがスローされます。
どんな助けでも大歓迎です。また、追加の詳細を提供する必要がある場合は、お知らせください。