Skip to content

Extra cost of some nipype interfaces #823

Closed
@oesteban

Description

@oesteban

It seems that we are reaching to a point where the overhead of certain interfaces may be prohibitive:

Traceback (most recent call last):
  File "/usr/local/miniconda/lib/python3.6/site-packages/niworkflows/nipype/pipeline/plugins/multiproc.py", line 51, in run_node
    result['result'] = node.run(updatehash=updatehash)
  File "/usr/local/miniconda/lib/python3.6/site-packages/niworkflows/nipype/pipeline/engine/nodes.py", line 407, in run
    self._run_interface()
  File "/usr/local/miniconda/lib/python3.6/site-packages/niworkflows/nipype/pipeline/engine/nodes.py", line 517, in _run_interface
    self._result = self._run_command(execute)
  File "/usr/local/miniconda/lib/python3.6/site-packages/niworkflows/nipype/pipeline/engine/nodes.py", line 650, in _run_command
    result = self._interface.run()
  File "/usr/local/miniconda/lib/python3.6/site-packages/niworkflows/nipype/interfaces/base.py", line 1088, in run
    runtime = self._run_interface(runtime)
  File "/usr/local/miniconda/lib/python3.6/site-packages/fmriprep/interfaces/itk.py", line 136, in _run_interface
    for i, (in_file, in_xfm) in enumerate(zip(in_files, xfms_list))
  File "/usr/local/miniconda/lib/python3.6/site-packages/fmriprep/interfaces/itk.py", line 136, in <listcomp>
    for i, (in_file, in_xfm) in enumerate(zip(in_files, xfms_list))
  File "/usr/local/miniconda/lib/python3.6/site-packages/fmriprep/interfaces/itk.py", line 262, in _applytfms
    runtime = xfm.run().runtime
  File "/usr/local/miniconda/lib/python3.6/site-packages/niworkflows/nipype/interfaces/base.py", line 1072, in run
    version=self.version)
  File "/usr/local/miniconda/lib/python3.6/site-packages/niworkflows/nipype/interfaces/ants/base.py", line 128, in version
    return Info().version
  File "/usr/local/miniconda/lib/python3.6/site-packages/niworkflows/nipype/interfaces/ants/base.py", line 45, in version
    res = subprocess.check_output([cmd, '--version']).decode('utf-8')
  File "/usr/local/miniconda/lib/python3.6/subprocess.py", line 336, in check_output
    **kwargs).stdout
  File "/usr/local/miniconda/lib/python3.6/subprocess.py", line 418, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['/usr/lib/ants/antsRegistration', '--version']' died with <Signals.SIGKILL: 9>.

When using antsApplyTransforms and friends, nipype needs to check the version every time. That version check requires forking a new process. As a result, fmriprep is continuously forking processes.

Some of this overhead could be addressed (like this problem, we could catch ants version the first time it is run) but I fear these problems will be biting back.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions