                     "\n3) Try enabling 'Mixed Precision' training."
                     "\n4) Use a more lightweight model, or select the model's 'LowMem' option "
                     "(in config) if it has one.")
              raise FaceswapError(msg) from err
          except Exception as err:
              if get_backend() == "amd":
                  # pylint:disable=import-outside-toplevel
                  from lib.plaidml_utils import is_plaidml_error
                  if (is_plaidml_error(err) and (
                          "CL_MEM_OBJECT_ALLOCATION_FAILURE" in str(err).upper() or
                          "enough memory for the current schedule" in str(err).lower())):
                      msg = ("You do not have enough GPU memory available to train the selected "
                             "model at the selected settings. You can try a number of things:"
                             "\n1) Close any other application that is using your GPU (web browsers "
                             "are particularly bad for this)."
                             "\n2) Lower the batchsize (the amount of images fed into the model "
                             "each iteration)."
                             "\n3) Use a more lightweight model, or select the model's 'LowMem' "
                             "option (in config) if it has one.")
                      raise FaceswapError(msg) from err
              raise
          self._log_tensorboard(loss)
          loss = self._collate_and_store_loss(loss[1:])
          self._print_loss(loss)
          if do_snapshot:
              self._model.snapshot()
 
</s> remove         except Exception as err:
            if get_backend() == "amd":
                # pylint:disable=import-outside-toplevel
                from lib.plaidml_utils import is_plaidml_error
                if (is_plaidml_error(err) and (
                        "CL_MEM_OBJECT_ALLOCATION_FAILURE" in str(err).upper() or
                        "enough memory for the current schedule" in str(err).lower())):
                    msg = ("You do not have enough GPU memory available to run detection at "
                           "the selected batch size. You can try a number of things:"
                           "\n1) Close any other application that is using your GPU (web "
                           "browsers are particularly bad for this)."
                           "\n2) Lower the batchsize (the amount of images fed into the "
                           "model) by editing the plugin settings (GUI: Settings > Configure "
                           "extract settings, CLI: Edit the file "
                           "faceswap/config/extract.ini).")
                    raise FaceswapError(msg) from err
            raise
 </s> add  </s> remove             loss: List[float] = self._model.model.train_on_batch(model_inputs, y=model_targets)
 </s> add             loss: T.List[float] = self._model.model.train_on_batch(model_inputs, y=model_targets) </s> remove         if get_backend() == "amd":  # Expand out AMD inputs + targets
            model_inputs = [inp for side in model_inputs for inp in side]  # type: ignore
            model_targets = [tgt for side in model_targets for tgt in side]  # type: ignore
 </s> add  </s> remove         self._mixed_precision = self.config["mixed_precision"] and get_backend() != "amd"
 </s> add         self._mixed_precision = self.config["mixed_precision"] </s> remove         if get_backend() == "amd" and model.no_amd:
            valid = [k for k, v in _MODEL_MAPPING.items() if not v.no_amd]
            raise FaceswapError(f"'{arch}' is not compatible with the AMD backend. Choose one of "
                                f"{valid}.")

 </s> add 
                     "\n3) Try enabling 'Mixed Precision' training."
                     "\n4) Use a more lightweight model, or select the model's 'LowMem' option "
                     "(in config) if it has one.")
              raise FaceswapError(msg) from err

















          self._log_tensorboard(loss)
          loss = self._collate_and_store_loss(loss[1:])
          self._print_loss(loss)
          if do_snapshot:
              self._model.snapshot()
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 Remove plaidML support (#1325)

* Remove PlaidML reference from readme files

* Remove AMD option from installers

* remove amd requirements and update setup.py

* remove plaidml test from CI workflow

* gpustats: remove plaidml backend

* plaid removals:
  - faceswap.py - python version check
  - setup.cfg - plaidml typing ignore
  - lib.keras_utils - All plaid code
  - lib.launcher.py - All plaidml checks and configuration

* remove tf2.2 specific code from GUI event reader

* lib.model - remove all plaidml implementations

* plugins.extract - remove plaidml code

* plugins.train remove plaidml code

* lib.convert - remove plaidml code

* tools.model: remove plaidml code

* Remove plaidML tests from unit tests

* remove plaidml_utils and docsting cleanups

* Remove plaidML refs from configs

* fix keras imports 
plugins/train/trainer/_base.py