|
15 | 15 | import tools.edm2_loss as edm2_loss |
16 | 16 | import ast |
17 | 17 | import copy |
| 18 | +import inspect |
| 19 | +import types |
18 | 20 |
|
19 | 21 | from tqdm import tqdm |
20 | 22 |
|
@@ -1001,7 +1003,35 @@ def train(self, args): |
1001 | 1003 |
|
1002 | 1004 | optimizer_kwargs[key] = value |
1003 | 1005 |
|
1004 | | - apply_orthograd = any(optimizer_kwargs.get(key, False) for key in ['use_orthograd', 'orthograd']) |
| 1006 | + try: |
| 1007 | + # Check optimizer defaults |
| 1008 | + case_sensitive_optimizer_type = args.optimizer_type # not lower |
| 1009 | + |
| 1010 | + if "." not in case_sensitive_optimizer_type: # from torch.optim |
| 1011 | + optimizer_module = torch.optim |
| 1012 | + else: # from other library |
| 1013 | + values = case_sensitive_optimizer_type.split(".") |
| 1014 | + optimizer_module = importlib.import_module(".".join(values[:-1])) |
| 1015 | + case_sensitive_optimizer_type = values[-1] |
| 1016 | + |
| 1017 | + # Need to handle base optimizer |
| 1018 | + if case_sensitive_optimizer_type.lower() == "schedulefreewrapper": |
| 1019 | + case_sensitive_full_base_optimizer_name = optimizer_kwargs.get("base_optimizer_type", None) |
| 1020 | + base_optimizer_values = case_sensitive_full_base_optimizer_name.split(".") |
| 1021 | + base_optimizer_module = importlib.import_module(".".join(base_optimizer_values[:-1])) |
| 1022 | + case_sensitive_base_optimizer_type = base_optimizer_values[-1] |
| 1023 | + optimizer_class = getattr(base_optimizer_module, case_sensitive_base_optimizer_type) |
| 1024 | + else: |
| 1025 | + optimizer_class = getattr(optimizer_module, case_sensitive_optimizer_type) |
| 1026 | + |
| 1027 | + sig = inspect.signature(optimizer_class.__init__) |
| 1028 | + |
| 1029 | + optimizer_init_sig_parameters = sig.parameters |
| 1030 | + except Exception as e: |
| 1031 | + logger.warning(f"Encountered an error while trying to determine default orthograd from optimizer init signature. {e}") |
| 1032 | + optimizer_init_sig_parameters = {} |
| 1033 | + |
| 1034 | + apply_orthograd = any(optimizer_kwargs.get(key, getattr(optimizer_init_sig_parameters.get(key, types.SimpleNamespace()), "default", False)) == True for key in ['use_orthograd', 'orthograd']) |
1005 | 1035 |
|
1006 | 1036 | # make backward compatibility for text_encoder_lr |
1007 | 1037 | support_multiple_lrs = hasattr(network, "prepare_optimizer_params_with_multiple_te_lrs") |
|
0 commit comments