Merge pull request #1285 from ccharest93/main

Hyperparameter tracking
This commit is contained in:
Kohya S
2024-05-19 16:31:33 +09:00
committed by GitHub
10 changed files with 36 additions and 9 deletions

View File

@@ -310,7 +310,7 @@ def train(args):
init_kwargs["wandb"] = {"name": args.wandb_run_name} init_kwargs["wandb"] = {"name": args.wandb_run_name}
if args.log_tracker_config is not None: if args.log_tracker_config is not None:
init_kwargs = toml.load(args.log_tracker_config) init_kwargs = toml.load(args.log_tracker_config)
accelerator.init_trackers("finetuning" if args.log_tracker_name is None else args.log_tracker_name, init_kwargs=init_kwargs) accelerator.init_trackers("finetuning" if args.log_tracker_name is None else args.log_tracker_name, config=train_util.filter_sensitive_args(args), init_kwargs=init_kwargs)
# For --sample_at_first # For --sample_at_first
train_util.sample_images(accelerator, args, 0, global_step, accelerator.device, vae, tokenizer, text_encoder, unet) train_util.sample_images(accelerator, args, 0, global_step, accelerator.device, vae, tokenizer, text_encoder, unet)

View File

@@ -3388,6 +3388,33 @@ def add_masked_loss_arguments(parser: argparse.ArgumentParser):
help="apply mask for calculating loss. conditioning_data_dir is required for dataset. / 損失計算時にマスクを適用する。datasetにはconditioning_data_dirが必要", help="apply mask for calculating loss. conditioning_data_dir is required for dataset. / 損失計算時にマスクを適用する。datasetにはconditioning_data_dirが必要",
) )
def filter_sensitive_args(args: argparse.Namespace):
sensitive_args = ["wandb_api_key", "huggingface_token"]
sensitive_path_args = [
"pretrained_model_name_or_path",
"vae",
"tokenizer_cache_dir",
"train_data_dir",
"conditioning_data_dir",
"reg_data_dir",
"output_dir",
"logging_dir",
]
filtered_args = {}
for k, v in vars(args).items():
# filter out sensitive values
if k not in sensitive_args + sensitive_path_args:
#Accelerate values need to have type `bool`,`str`, `float`, `int`, or `None`.
if v is None or isinstance(v, bool) or isinstance(v, str) or isinstance(v, float) or isinstance(v, int):
filtered_args[k] = v
# accelerate does not support lists
elif isinstance(v, list):
filtered_args[k] = f"{v}"
# accelerate does not support objects
elif isinstance(v, object):
filtered_args[k] = f"{v}"
return filtered_args
# verify command line args for training # verify command line args for training
def verify_command_line_training_args(args: argparse.Namespace): def verify_command_line_training_args(args: argparse.Namespace):

View File

@@ -589,7 +589,7 @@ def train(args):
init_kwargs["wandb"] = {"name": args.wandb_run_name} init_kwargs["wandb"] = {"name": args.wandb_run_name}
if args.log_tracker_config is not None: if args.log_tracker_config is not None:
init_kwargs = toml.load(args.log_tracker_config) init_kwargs = toml.load(args.log_tracker_config)
accelerator.init_trackers("finetuning" if args.log_tracker_name is None else args.log_tracker_name, init_kwargs=init_kwargs) accelerator.init_trackers("finetuning" if args.log_tracker_name is None else args.log_tracker_name, config=train_util.filter_sensitive_args(args), init_kwargs=init_kwargs)
# For --sample_at_first # For --sample_at_first
sdxl_train_util.sample_images( sdxl_train_util.sample_images(

View File

@@ -354,7 +354,7 @@ def train(args):
if args.log_tracker_config is not None: if args.log_tracker_config is not None:
init_kwargs = toml.load(args.log_tracker_config) init_kwargs = toml.load(args.log_tracker_config)
accelerator.init_trackers( accelerator.init_trackers(
"lllite_control_net_train" if args.log_tracker_name is None else args.log_tracker_name, init_kwargs=init_kwargs "lllite_control_net_train" if args.log_tracker_name is None else args.log_tracker_name, config=train_util.filter_sensitive_args(args), init_kwargs=init_kwargs
) )
loss_recorder = train_util.LossRecorder() loss_recorder = train_util.LossRecorder()

View File

@@ -324,7 +324,7 @@ def train(args):
if args.log_tracker_config is not None: if args.log_tracker_config is not None:
init_kwargs = toml.load(args.log_tracker_config) init_kwargs = toml.load(args.log_tracker_config)
accelerator.init_trackers( accelerator.init_trackers(
"lllite_control_net_train" if args.log_tracker_name is None else args.log_tracker_name, init_kwargs=init_kwargs "lllite_control_net_train" if args.log_tracker_name is None else args.log_tracker_name, config=train_util.filter_sensitive_args(args), init_kwargs=init_kwargs
) )
loss_recorder = train_util.LossRecorder() loss_recorder = train_util.LossRecorder()

View File

@@ -344,7 +344,7 @@ def train(args):
if args.log_tracker_config is not None: if args.log_tracker_config is not None:
init_kwargs = toml.load(args.log_tracker_config) init_kwargs = toml.load(args.log_tracker_config)
accelerator.init_trackers( accelerator.init_trackers(
"controlnet_train" if args.log_tracker_name is None else args.log_tracker_name, init_kwargs=init_kwargs "controlnet_train" if args.log_tracker_name is None else args.log_tracker_name, config=train_util.filter_sensitive_args(args), init_kwargs=init_kwargs
) )
loss_recorder = train_util.LossRecorder() loss_recorder = train_util.LossRecorder()

View File

@@ -290,7 +290,7 @@ def train(args):
init_kwargs["wandb"] = {"name": args.wandb_run_name} init_kwargs["wandb"] = {"name": args.wandb_run_name}
if args.log_tracker_config is not None: if args.log_tracker_config is not None:
init_kwargs = toml.load(args.log_tracker_config) init_kwargs = toml.load(args.log_tracker_config)
accelerator.init_trackers("dreambooth" if args.log_tracker_name is None else args.log_tracker_name, init_kwargs=init_kwargs) accelerator.init_trackers("dreambooth" if args.log_tracker_name is None else args.log_tracker_name, config=train_util.filter_sensitive_args(args), init_kwargs=init_kwargs)
# For --sample_at_first # For --sample_at_first
train_util.sample_images(accelerator, args, 0, global_step, accelerator.device, vae, tokenizer, text_encoder, unet) train_util.sample_images(accelerator, args, 0, global_step, accelerator.device, vae, tokenizer, text_encoder, unet)

View File

@@ -774,7 +774,7 @@ class NetworkTrainer:
if args.log_tracker_config is not None: if args.log_tracker_config is not None:
init_kwargs = toml.load(args.log_tracker_config) init_kwargs = toml.load(args.log_tracker_config)
accelerator.init_trackers( accelerator.init_trackers(
"network_train" if args.log_tracker_name is None else args.log_tracker_name, init_kwargs=init_kwargs "network_train" if args.log_tracker_name is None else args.log_tracker_name, config=train_util.filter_sensitive_args(args), init_kwargs=init_kwargs
) )
loss_recorder = train_util.LossRecorder() loss_recorder = train_util.LossRecorder()

View File

@@ -510,7 +510,7 @@ class TextualInversionTrainer:
if args.log_tracker_config is not None: if args.log_tracker_config is not None:
init_kwargs = toml.load(args.log_tracker_config) init_kwargs = toml.load(args.log_tracker_config)
accelerator.init_trackers( accelerator.init_trackers(
"textual_inversion" if args.log_tracker_name is None else args.log_tracker_name, init_kwargs=init_kwargs "textual_inversion" if args.log_tracker_name is None else args.log_tracker_name, config=train_util.filter_sensitive_args(args), init_kwargs=init_kwargs
) )
# function for saving/removing # function for saving/removing

View File

@@ -407,7 +407,7 @@ def train(args):
if args.log_tracker_config is not None: if args.log_tracker_config is not None:
init_kwargs = toml.load(args.log_tracker_config) init_kwargs = toml.load(args.log_tracker_config)
accelerator.init_trackers( accelerator.init_trackers(
"textual_inversion" if args.log_tracker_name is None else args.log_tracker_name, init_kwargs=init_kwargs "textual_inversion" if args.log_tracker_name is None else args.log_tracker_name, config=train_util.filter_sensitive_args(args), init_kwargs=init_kwargs
) )
# function for saving/removing # function for saving/removing