Skip to content

Commit 73daac1

Browse files
committed
Handle determining the default orthograd value for the optimizer
1 parent 15b7c6a commit 73daac1

1 file changed

Lines changed: 31 additions & 1 deletion

File tree

train_network.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import tools.edm2_loss as edm2_loss
1616
import ast
1717
import copy
18+
import inspect
19+
import types
1820

1921
from tqdm import tqdm
2022

@@ -1001,7 +1003,35 @@ def train(self, args):
10011003

10021004
optimizer_kwargs[key] = value
10031005

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'])
10051035

10061036
# make backward compatibility for text_encoder_lr
10071037
support_multiple_lrs = hasattr(network, "prepare_optimizer_params_with_multiple_te_lrs")

0 commit comments

Comments
 (0)