diff --git a/nipype/interfaces/base.py b/nipype/interfaces/base.py index 62ea7851ac..b12289ea2f 100644 --- a/nipype/interfaces/base.py +++ b/nipype/interfaces/base.py @@ -774,7 +774,7 @@ def __init__(self, from_file=None, **inputs): self.__class__.__name__) self.inputs = self.input_spec(**inputs) - self.estimated_memory_gb = 1 + self.estimated_memory_gb = 0.25 self.num_threads = 1 if from_file is not None: diff --git a/nipype/pipeline/engine/nodes.py b/nipype/pipeline/engine/nodes.py index 71331d38f5..cbfa70cebb 100644 --- a/nipype/pipeline/engine/nodes.py +++ b/nipype/pipeline/engine/nodes.py @@ -79,7 +79,8 @@ class Node(EngineBase): def __init__(self, interface, name, iterables=None, itersource=None, synchronize=False, overwrite=None, needed_outputs=None, - run_without_submitting=False, **kwargs): + run_without_submitting=False, n_procs=1, mem_gb=None, + **kwargs): """ Parameters ---------- @@ -168,6 +169,11 @@ def __init__(self, interface, name, iterables=None, itersource=None, self.input_source = {} self.needed_outputs = [] self.plugin_args = {} + + self._interface.num_threads = n_procs + if mem_gb is not None: + self._interface.estimated_memory_gb = mem_gb + if needed_outputs: self.needed_outputs = sorted(needed_outputs) self._got_inputs = False diff --git a/nipype/pipeline/plugins/multiproc.py b/nipype/pipeline/plugins/multiproc.py index 0465b4f880..3994f2e1cd 100644 --- a/nipype/pipeline/plugins/multiproc.py +++ b/nipype/pipeline/plugins/multiproc.py @@ -231,11 +231,12 @@ def _send_procs_to_workers(self, updatehash=False, graph=None): busy_processors += self.procs[jobid]._interface.num_threads else: - raise ValueError("Resources required by jobid %d (%f GB, %d threads)" - "exceed what is available on the system (%f GB, %d threads)"%(jobid, - self.procs[jobid].__interface.estimated_memory_gb, - self.procs[jobid].__interface.num_threads, - self.memory_gb,self.processors)) + raise ValueError( + "Resources required by jobid {0} ({3}GB, {4} threads) exceed what is " + "available on the system ({1}GB, {2} threads)".format( + jobid, self.memory_gb, self.processors, + self.procs[jobid]._interface.estimated_memory_gb, + self.procs[jobid]._interface.num_threads)) free_memory_gb = self.memory_gb - busy_memory_gb free_processors = self.processors - busy_processors