| import gradio as gr |
| import os |
|
|
| class BasicTraining: |
| def __init__( |
| self, |
| learning_rate_value='1e-6', |
| lr_scheduler_value='constant', |
| lr_warmup_value='0', |
| finetuning: bool = False, |
| ): |
| self.learning_rate_value = learning_rate_value |
| self.lr_scheduler_value = lr_scheduler_value |
| self.lr_warmup_value = lr_warmup_value |
| self.finetuning = finetuning |
|
|
| with gr.Row(): |
| self.train_batch_size = gr.Slider( |
| minimum=1, |
| maximum=64, |
| label='Train batch size', |
| value=1, |
| step=1, |
| ) |
| self.epoch = gr.Number(label='Epoch', value=1, precision=0) |
| self.max_train_epochs = gr.Textbox( |
| label='Max train epoch', |
| placeholder='(Optional) Enforce number of epoch', |
| ) |
| self.save_every_n_epochs = gr.Number( |
| label='Save every N epochs', value=1, precision=0 |
| ) |
| self.caption_extension = gr.Textbox( |
| label='Caption Extension', |
| placeholder='(Optional) Extension for caption files. default: .caption', |
| ) |
| with gr.Row(): |
| self.mixed_precision = gr.Dropdown( |
| label='Mixed precision', |
| choices=[ |
| 'no', |
| 'fp16', |
| 'bf16', |
| ], |
| value='fp16', |
| ) |
| self.save_precision = gr.Dropdown( |
| label='Save precision', |
| choices=[ |
| 'float', |
| 'fp16', |
| 'bf16', |
| ], |
| value='fp16', |
| ) |
| self.num_cpu_threads_per_process = gr.Slider( |
| minimum=1, |
| maximum=os.cpu_count(), |
| step=1, |
| label='Number of CPU threads per core', |
| value=2, |
| ) |
| self.seed = gr.Textbox( |
| label='Seed', placeholder='(Optional) eg:1234' |
| ) |
| self.cache_latents = gr.Checkbox(label='Cache latents', value=True) |
| self.cache_latents_to_disk = gr.Checkbox( |
| label='Cache latents to disk', value=False |
| ) |
| with gr.Row(): |
| self.learning_rate = gr.Number( |
| label='Learning rate', value=learning_rate_value |
| ) |
| self.lr_scheduler = gr.Dropdown( |
| label='LR Scheduler', |
| choices=[ |
| 'adafactor', |
| 'constant', |
| 'constant_with_warmup', |
| 'cosine', |
| 'cosine_with_restarts', |
| 'linear', |
| 'polynomial', |
| ], |
| value=lr_scheduler_value, |
| ) |
| self.lr_warmup = gr.Slider( |
| label='LR warmup (% of steps)', |
| value=lr_warmup_value, |
| minimum=0, |
| maximum=100, |
| step=1, |
| ) |
| self.optimizer = gr.Dropdown( |
| label='Optimizer', |
| choices=[ |
| 'AdamW', |
| 'AdamW8bit', |
| 'Adafactor', |
| 'DAdaptation', |
| 'DAdaptAdaGrad', |
| 'DAdaptAdam', |
| 'DAdaptAdan', |
| 'DAdaptAdanIP', |
| 'DAdaptAdamPreprint', |
| 'DAdaptLion', |
| 'DAdaptSGD', |
| 'Lion', |
| 'Lion8bit', |
| "PagedAdamW8bit", |
| "PagedLion8bit", |
| 'Prodigy', |
| 'SGDNesterov', |
| 'SGDNesterov8bit', |
| ], |
| value='AdamW8bit', |
| interactive=True, |
| ) |
| with gr.Row(visible=not finetuning): |
| self.lr_scheduler_num_cycles = gr.Textbox( |
| label='LR number of cycles', |
| placeholder='(Optional) For Cosine with restart and polynomial only', |
| ) |
|
|
| self.lr_scheduler_power = gr.Textbox( |
| label='LR power', |
| placeholder='(Optional) For Cosine with restart and polynomial only', |
| ) |
| with gr.Row(): |
| self.optimizer_args = gr.Textbox( |
| label='Optimizer extra arguments', |
| placeholder='(Optional) eg: relative_step=True scale_parameter=True warmup_init=True', |
| ) |
| with gr.Row(visible=not finetuning): |
| self.max_resolution = gr.Textbox( |
| label='Max resolution', |
| value='512,512', |
| placeholder='512,512', |
| ) |
| self.stop_text_encoder_training = gr.Slider( |
| minimum=-1, |
| maximum=100, |
| value=0, |
| step=1, |
| label='Stop text encoder training', |
| ) |
| with gr.Row(visible=not finetuning): |
| self.enable_bucket = gr.Checkbox(label='Enable buckets', value=True) |
| self.min_bucket_reso = gr.Slider(label='Minimum bucket resolution', value=256, minimum=64, maximum=4096, step=64, info='Minimum size in pixel a bucket can be (>= 64)') |
| self.max_bucket_reso = gr.Slider(label='Maximum bucket resolution', value=2048, minimum=64, maximum=4096, step=64, info='Maximum size in pixel a bucket can be (>= 64)') |
| |