2016-05-14 6 views
0

私はParallelGroupの中で1000を超える並列ケースを評価している並列ワークフローを実行しようとしています。少量のコアで実行した場合、クラッシュは発生しませんが、ノードの数を増やすとエラーが発生し、問題がどのように分割されているかを示します。OpenMDAO PetscTgtVecWrapper TypeError

OpenMDAOとPETScの深いダンジョンから、私が見る限りでは通信テーブルを設定するときの目標インデックスに関するエラーが発生します。以下は、エラーのトレースバックのプリントは次のとおりです。

File "/home/frza/git/OpenMDAO/openmdao/core/group.py", line 454, in _setup_vectors 
impl=self._impl, alloc_derivs=alloc_derivs) 
File "/home/frza/git/OpenMDAO/openmdao/core/group.py", line 1456, in _setup_data_transfer 
self._setup_data_transfer(my_params, None, alloc_derivs) 
File "/home/frza/git/OpenMDAO/openmdao/core/petsc_impl.py", line 125, in create_data_xfer 
File "/home/frza/git/OpenMDAO/openmdao/core/petsc_impl.py", line 397, in __init__ 
tgt_idx_set = PETSc.IS().createGeneral(tgt_idxs, comm=comm) 
File "PETSc/IS.pyx", line 74, in petsc4py.PETSc.IS.createGeneral (src/petsc4py.PETSc.c:74696) 
tgt_idx_set = PETSc.IS().createGeneral(tgt_idxs, comm=comm) 
File "PETSc/arraynpy.pxi", line 121, in petsc4py.PETSc.iarray (src/petsc4py.PETSc.c:8230) 
TypeError: Cannot cast array data from dtype('int64') to dtype('int32') according to the rule 'safe' 

この回答:

https://scicomp.stackexchange.com/questions/2355/32bit-64bit-issue-when-working-with-numpy-and-petsc4py/2356#2356

が正しいと定義されているかどうか確認するためにあなたが tgt_idxsベクトルを設定する場所を探すために私を導きましたdtype PETSc.IntType。しかし、これまでのところ、 Petsc has generated inconsistent dataエラーが発生するのは、エラーの原因と思われる配列のdtypeを設定しようとしたときです。

私はリンク先の答えに示唆されているように、まだ--with-64-bit-indicesでPETScを再インストールしようとしませんでした。このようにPETScを設定していますか?

編集:私はまた、データサイズが原因巨大になってしまうことを見ることができる行われた

import numpy as np 

from openmdao.api import Component, Group, Problem, IndepVarComp, \ 
         ParallelGroup 


class Model(Component): 

    def __init__(self, nsec, nx, nch): 
     super(Model, self).__init__() 

     self.add_output('outputs', shape=[nx+1, nch*6*3*nsec]) 

    def solve_nonlinear(self, params, unknowns, resids): 

     pass 

class Aggregate(Component): 

    def __init__(self, nsec, ncase, nx, nch, nsec_env=12): 
     super(Aggregate, self).__init__() 

     self.ncase = ncase 

     for i in range(ncase): 
      self.add_param('outputs_sec%03d'%i, shape=[nx+1, nch*6*3*nsec]) 

     for i in range(nsec): 
      self.add_output('aoutput_sec%03d' % i, shape=[nsec_env, 6]) 


    def solve_nonlinear(self, params, unknowns, resids): 

     pass 


class ParModel(Group): 

    def __init__(self, nsec, ncase, nx, nch, nsec_env=12): 
     super(ParModel, self).__init__() 

     pg = self.add('pg', ParallelGroup()) 

     promotes = ['aoutput_sec%03d' % i for i in range(nsec)] 
     self.add('agg', Aggregate(nsec, ncase, nx, nch, nsec_env), promotes=promotes) 

     for i in range(ncase): 
      pg.add('case%03d' % i, Model(nsec, nx, nch)) 
      self.connect('pg.case%03d.outputs'%i, 'agg.outputs_sec%03d'%i) 

if __name__ == '__main__': 

    from openmdao.core.mpi_wrap import MPI 

    if MPI: 
     from openmdao.core.petsc_impl import PetscImpl as impl 
    else: 
     from openmdao.core.basic_impl import BasicImpl as impl 

    p = Problem(impl=impl, root=Group()) 
    root = p.root 

    root.add('dlb', ParModel(20, 1084, 36, 6)) 
    import time 
    t0 = time.time() 
    p.setup() 
    print 'setup time', time.time() - t0 

:私は今、私が手にエラーを複製、問題のストリップダウンバージョンを設定した 多くの場合、我々は評価する。私は何とかデータサイズを減らすことができるかどうかを見ていきます。私は実際に、これは誤りで、それ以来、今ではすべてのいずれかのクラッシュを実行するために取得することはできません。

petsc4py.PETSc.Errorpetsc4py.PETSc.Error: error code 75 
[77] VecCreateMPIWithArray() line 320 in /home/MET/Python-2.7.10_Intel/opt/petsc-3.6.2/src/vec/vec/impls/mpi/pbvec.c 
[77] VecSetSizes() line 1374 in /home/MET/Python-2.7.10_Intel/opt/petsc-3.6.2/src/vec/vec/interface/vector.c 
[77] Arguments are incompatible 
[77] Local size 86633280 cannot be larger than global size 73393408 
: error code 75 

またはTypeErrorを。

答えて

1

あなたが実行しているデータサイズは32ビットインデックスよりも明らかに大きいので、データサイズを減らすことができない場合は、--with-64-bit-indicesで再コンパイルすると意味があります。 OpenMDAOはPETSc.IntTypeを内部的にインデックスに使用しているため、再コンパイルすると64ビットのサイズになります。

+0

okありがとうございます。再コンパイルするとエラーはなくなりますが、ノードのメモリが不足するだけです。私たちの問題のデータサイズを減らす方法を見つけ出す必要があります。 – frza

0

私はpetscでこのオプションを使用したことはありません。しばらくすると、コア数を増やすにはいくつかの問題がありましたが、私たちの問題はOpenMPIコンパイルであると判断しました。 OpenMDAOを再コンパイルすることで問題が解決されました。

このエラーはセットアップ時に表示されるため、コードをテストするために実行する必要はありません。問題を示しているモデルを私たちに提供し、それを実行できるならば、少なくとも同じ問題がクラスタ上で起きているかどうかを確認することができます。

正常に実行できるコア数と、何点でブレークダウンするかを知っておくとよいでしょう。

関連する問題