                       multiprocess, rotate_images, min_size, normalize_method)
          self._flow = ["detect", "align", "mask"]
          self.phase = self._flow[0]
          self._queue_size = 32
          self._vram_buffer = 320  # Leave a buffer for VRAM allocation
          self._detect = self._load_detect(detector, rotate_images, min_size, configfile)
          self._align = self._load_align(aligner, configfile, normalize_method)
          self._mask = self._load_mask(masker, configfile)
          self._is_parallel = self._set_parallel_processing(multiprocess)
          self._set_extractor_batchsize()
 
</s> remove     @property
    def _total_vram_required(self):
        """ Return vram required for all phases plus the buffer """
        retval = sum([getattr(self, "_{}".format(p)).vram for p in self._flow]) + self._vram_buffer
        logger.trace(retval)
        return retval

 </s> add  </s> remove         self.vram = 4096
 </s> add         self.vram = 4112 </s> remove         self.vram_per_batch = 208
 </s> add         self.vram_per_batch = 304 </s> remove         self.vram_per_batch = 96
 </s> add         self.vram_per_batch = 400 </s> remove         self.vram = 3104
 </s> add         self.vram = 2944
        self._vram_buffer = 256  # Leave a buffer for VRAM allocation
                       multiprocess, rotate_images, min_size, normalize_method)
          self._flow = ["detect", "align", "mask"]
          self.phase = self._flow[0]
          self._queue_size = 32
        self._vram_buffer = 256  # Leave a buffer for VRAM allocation
          self._detect = self._load_detect(detector, rotate_images, min_size, configfile)
          self._align = self._load_align(aligner, configfile, normalize_method)
          self._mask = self._load_mask(masker, configfile)
          self._is_parallel = self._set_parallel_processing(multiprocess)
          self._set_extractor_batchsize()
keep keep keep keep replace keep keep keep keep keep
 Optimize Extract parallel VRAM allocation 
plugins/extract/pipeline.py