          logger.verbose("%s - %sMB free of %sMB",
                         stats["device"],
                         vram_free,
                         int(stats["total"]))
          if vram_free <= vram_required:
              logger.warning("Not enough free VRAM for parallel processing. "
                             "Switching to serial")
              return False
          return True
  
 
</s> remove         vram_required = (self._detector.vram +
                         self._aligner.vram +
                         self._masker.vram +
                         self._vram_buffer)
 </s> add  </s> remove             logger.debug("Parallel processing discabled by amd")
 </s> add             logger.debug("Parallel processing disabled by amd") </s> remove             vram_required = (self._detector.vram + self._aligner.vram + self._masker.vram +
                             self._vram_buffer)
            batch_required = ((self._detector.vram_per_batch * self._detector.batchsize) +
                              (self._aligner.vram_per_batch * self._aligner.batchsize) +
                              (self._masker.vram_per_batch * self._masker.batchsize))
            plugin_required = vram_required + batch_required
 </s> add             batch_required = sum([plugin.vram_per_batch * plugin.batchsize
                                  for plugin in self._all_plugins])
            plugin_required = self._total_vram_required + batch_required </s> remove         if self._detector.vram == 0 and self._aligner.vram == 0 and self._masker.vram == 0:
            logger.debug("Either detector, aligner or masker have no VRAM requirements. Not "
                         "updating batchsize requirements.")
 </s> add         if sum([plugin.vram for plugin in self._all_plugins]) == 0:
            logger.debug("No plugins use VRAM. Not updating batchsize requirements.") </s> remove     except CalledProcessError as e:
        print_fail("[-] Test failed with %s" % e)
        fail_count += 1
 </s> add     except CalledProcessError as err:
        print_fail("[-] Test failed with %s" % err)
        FAIL_COUNT += 1
        if vram_free <= self._total_vram_required:
          logger.verbose("%s - %sMB free of %sMB",
                         stats["device"],
                         vram_free,
                         int(stats["total"]))
        if vram_free <= self._total_vram_required:
              logger.warning("Not enough free VRAM for parallel processing. "
                             "Switching to serial")
              return False
          return True
  
keep keep keep keep replace keep keep keep keep keep
 Smart Mask - Extract code review

- Lint simple_tests.py
- Only reformat alignments file if it exists otherwise change filename
- Update legacy alignments to new format at all stages
- faces_detect.Mask.from_dict - logging format fix
- convert.py fix otf for new pipeline
- cli.py - Add note that masks not used. Revert convert masks
- faces_detect.py - Revert non-extract code
- Add .p and .pickle extensions for serializer
- plugins/extract revert some changes
- scripts/fsmedia - Revert code changes
- Pipeline - cleanup
- Consistant alpha channel stripping (fixes single-process)
- Store landmarks as numpy array
- Code attribution
- Normalize feed face and reference face to 0.0 - 1.0 in convert
- Lock in mask VRAM sized
- Add documentation to plugin_loader
- Update alignments tool to work with new format 
plugins/extract/pipeline.py