Skip to content

Commit aee3609

Browse files
committed
Merge branch 'ctk_copy' into ctk_abstraction
# Conflicts: # modules/ui/BaseConceptWindowView.py # modules/ui/BaseTimestepDistributionWindowView.py # modules/ui/BaseTrainingTabView.py # modules/ui/CtkConceptWindowView.py # modules/ui/CtkTimestepDistributionWindowView.py # modules/ui/CtkTrainingTabView.py
2 parents e70bada + 1f73b3a commit aee3609

127 files changed

Lines changed: 348 additions & 610 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ repos:
1414
- id: check-yaml
1515

1616
- repo: https://github.com/astral-sh/ruff-pre-commit
17-
rev: v0.15.15
17+
rev: v0.15.17
1818
hooks:
1919
# Run the Ruff linter, but not the formatter.
2020
- id: ruff

modules/dataLoader/ChromaBaseDataLoader.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from mgds.pipelineModules.Tokenize import Tokenize
2727

2828

29+
@factory.register(BaseDataLoader, ModelType.CHROMA_1)
2930
class ChromaBaseDataLoader(
3031
BaseDataLoader,
3132
DataLoaderText2ImageMixin,
@@ -154,5 +155,3 @@ def _create_dataset(
154155
config, model, model_setup, train_progress, is_validation,
155156
aspect_bucketing_quantization=64,
156157
)
157-
158-
factory.register(BaseDataLoader, ChromaBaseDataLoader, ModelType.CHROMA_1)

modules/dataLoader/ErnieBaseDataLoader.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77
from modules.util import factory
88
from modules.util.config.TrainConfig import TrainConfig
99
from modules.util.enum.ModelType import ModelType
10-
from modules.util.thread_safety import apply_thread_safe_forward
1110
from modules.util.TrainProgress import TrainProgress
1211

1312
from mgds.pipelineModules.DecodeTokens import DecodeTokens
1413
from mgds.pipelineModules.DecodeVAE import DecodeVAE
1514
from mgds.pipelineModules.EncodeMistralText import EncodeMistralText
1615
from mgds.pipelineModules.EncodeVAE import EncodeVAE
16+
from mgds.pipelineModules.PadMaskedTokens import PadMaskedTokens
17+
from mgds.pipelineModules.PruneMaskedTokens import PruneMaskedTokens
1718
from mgds.pipelineModules.RescaleImageChannels import RescaleImageChannels
1819
from mgds.pipelineModules.SampleVAEDistribution import SampleVAEDistribution
1920
from mgds.pipelineModules.SaveImage import SaveImage
@@ -22,6 +23,7 @@
2223
from mgds.pipelineModules.Tokenize import Tokenize
2324

2425

26+
@factory.register(BaseDataLoader, ModelType.ERNIE)
2527
class ErnieBaseDataLoader(
2628
BaseDataLoader,
2729
DataLoaderText2ImageMixin,
@@ -32,15 +34,18 @@ def _preparation_modules(self, config: TrainConfig, model: ErnieModel):
3234
image_sample = SampleVAEDistribution(in_name='latent_image_distribution', out_name='latent_image', mode='mean')
3335
downscale_mask = ScaleImage(in_name='mask', out_name='latent_mask', factor=0.125)
3436
tokenize_prompt = Tokenize(in_name='prompt', tokens_out_name='tokens', mask_out_name='tokens_mask', tokenizer=model.tokenizer, max_token_length=PROMPT_MAX_LENGTH)
35-
if config.dataloader_threads > 1:
36-
apply_thread_safe_forward(model.text_encoder) # workaround for transformers#42673, unclear if Mistral is affected
3737
encode_prompt = EncodeMistralText(tokens_name='tokens', tokens_attention_mask_in_name='tokens_mask', hidden_state_out_name='text_encoder_hidden_state', tokens_attention_mask_out_name='tokens_mask',
3838
text_encoder=model.text_encoder, hidden_state_output_index=HIDDEN_STATES_LAYER, autocast_contexts=[model.autocast_context], dtype=model.train_dtype.torch_dtype())
39+
prune_masked_tokens = PruneMaskedTokens(tokens_name='tokens', tokens_mask_name='tokens_mask', hidden_state_name='text_encoder_hidden_state')
3940

4041
modules = [rescale_image, encode_image, image_sample]
4142
if config.masked_training or config.model_type.has_mask_input():
4243
modules.append(downscale_mask)
4344
modules += [tokenize_prompt, encode_prompt]
45+
46+
if config.latent_caching:
47+
modules.append(prune_masked_tokens)
48+
4449
return modules
4550

4651
def _cache_modules(self, config: TrainConfig, model: ErnieModel, model_setup: BaseErnieSetup):
@@ -71,6 +76,8 @@ def _cache_modules(self, config: TrainConfig, model: ErnieModel, model_setup: Ba
7176
)
7277

7378
def _output_modules(self, config: TrainConfig, model: ErnieModel, model_setup: BaseErnieSetup):
79+
pad_masked_tokens = PadMaskedTokens(tokens_name='tokens', tokens_mask_name='tokens_mask', hidden_state_name='text_encoder_hidden_state', max_length=PROMPT_MAX_LENGTH)
80+
7481
output_names = [
7582
'image_path', 'latent_image',
7683
'prompt',
@@ -84,7 +91,7 @@ def _output_modules(self, config: TrainConfig, model: ErnieModel, model_setup: B
8491

8592
output_names.append('text_encoder_hidden_state')
8693

87-
return self._output_modules_from_out_names(
94+
output_module_list = self._output_modules_from_out_names(
8895
model, model_setup,
8996
output_names=output_names,
9097
config=config,
@@ -94,6 +101,11 @@ def _output_modules(self, config: TrainConfig, model: ErnieModel, model_setup: B
94101
train_dtype=model.train_dtype,
95102
)
96103

104+
if config.latent_caching:
105+
output_module_list = [pad_masked_tokens] + output_module_list
106+
107+
return output_module_list
108+
97109
def _debug_modules(self, config: TrainConfig, model: ErnieModel):
98110
debug_dir = os.path.join(config.debug_dir, "dataloader")
99111

@@ -133,6 +145,3 @@ def _create_dataset(
133145
config, model, model_setup, train_progress, is_validation,
134146
aspect_bucketing_quantization=64,
135147
)
136-
137-
138-
factory.register(BaseDataLoader, ErnieBaseDataLoader, ModelType.ERNIE)

modules/dataLoader/Flux2BaseDataLoader.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from modules.util import factory
1515
from modules.util.config.TrainConfig import TrainConfig
1616
from modules.util.enum.ModelType import ModelType
17-
from modules.util.thread_safety import apply_thread_safe_forward
1817
from modules.util.TrainProgress import TrainProgress
1918

2019
from mgds.pipelineModules.DecodeTokens import DecodeTokens
@@ -30,6 +29,7 @@
3029
from mgds.pipelineModules.Tokenize import Tokenize
3130

3231

32+
@factory.register(BaseDataLoader, ModelType.FLUX_2)
3333
class Flux2BaseDataLoader(
3434
BaseDataLoader,
3535
DataLoaderText2ImageMixin,
@@ -43,8 +43,6 @@ def _preparation_modules(self, config: TrainConfig, model: Flux2Model):
4343
tokenize_prompt = Tokenize(in_name='prompt', tokens_out_name='tokens', mask_out_name='tokens_mask', tokenizer=model.tokenizer, max_token_length=config.text_encoder_sequence_length,
4444
apply_chat_template = lambda caption: mistral_format_input([caption], MISTRAL_SYSTEM_MESSAGE), apply_chat_template_kwargs = {'add_generation_prompt': False},
4545
)
46-
if config.dataloader_threads > 1:
47-
apply_thread_safe_forward(model.text_encoder) # workaround for transformers#42673
4846
encode_prompt = EncodeMistralText(tokens_name='tokens', tokens_attention_mask_in_name='tokens_mask', hidden_state_out_name='text_encoder_hidden_state', tokens_attention_mask_out_name='tokens_mask',
4947
text_encoder=model.text_encoder, autocast_contexts=[model.autocast_context], dtype=model.train_dtype.torch_dtype(),
5048
hidden_state_output_index=MISTRAL_HIDDEN_STATES_LAYERS,
@@ -53,8 +51,6 @@ def _preparation_modules(self, config: TrainConfig, model: Flux2Model):
5351
tokenize_prompt = Tokenize(in_name='prompt', tokens_out_name='tokens', mask_out_name='tokens_mask', tokenizer=model.tokenizer, max_token_length=config.text_encoder_sequence_length,
5452
apply_chat_template = lambda caption: qwen3_format_input(caption), apply_chat_template_kwargs = {'add_generation_prompt': True, 'enable_thinking': False}
5553
)
56-
if config.dataloader_threads > 1:
57-
apply_thread_safe_forward(model.text_encoder) # workaround for transformers#42673
5854
encode_prompt = EncodeQwenText(tokens_name='tokens', tokens_attention_mask_in_name='tokens_mask', hidden_state_out_name='text_encoder_hidden_state', tokens_attention_mask_out_name='tokens_mask',
5955
text_encoder=model.text_encoder, hidden_state_output_index=QWEN3_HIDDEN_STATES_LAYERS, autocast_contexts=[model.autocast_context], dtype=model.train_dtype.torch_dtype())
6056

@@ -161,6 +157,3 @@ def _create_dataset(
161157
config, model, model_setup, train_progress, is_validation,
162158
aspect_bucketing_quantization=64,
163159
)
164-
165-
166-
factory.register(BaseDataLoader, Flux2BaseDataLoader, ModelType.FLUX_2)

modules/dataLoader/FluxBaseDataLoader.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
from mgds.pipelineModules.Tokenize import Tokenize
2727

2828

29+
@factory.register(BaseDataLoader, ModelType.FLUX_DEV_1)
30+
@factory.register(BaseDataLoader, ModelType.FLUX_FILL_DEV_1)
2931
class FluxBaseDataLoader(
3032
BaseDataLoader,
3133
DataLoaderText2ImageMixin,
@@ -181,6 +183,3 @@ def _create_dataset(
181183
config, model, model_setup, train_progress, is_validation,
182184
aspect_bucketing_quantization=64,
183185
)
184-
185-
factory.register(BaseDataLoader, FluxBaseDataLoader, ModelType.FLUX_DEV_1)
186-
factory.register(BaseDataLoader, FluxBaseDataLoader, ModelType.FLUX_FILL_DEV_1)

modules/dataLoader/HiDreamBaseDataLoader.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from mgds.pipelineModules.Tokenize import Tokenize
2828

2929

30+
@factory.register(BaseDataLoader, ModelType.HI_DREAM_FULL)
3031
class HiDreamBaseDataLoader(
3132
BaseDataLoader,
3233
DataLoaderText2ImageMixin,
@@ -219,5 +220,3 @@ def _create_dataset(
219220
config, model, model_setup, train_progress, is_validation,
220221
aspect_bucketing_quantization=64,
221222
)
222-
223-
factory.register(BaseDataLoader, HiDreamBaseDataLoader, ModelType.HI_DREAM_FULL)

modules/dataLoader/HunyuanVideoBaseDataLoader.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from mgds.pipelineModules.Tokenize import Tokenize
3030

3131

32+
@factory.register(BaseDataLoader, ModelType.HUNYUAN_VIDEO)
3233
class HunyuanVideoBaseDataLoader(
3334
BaseDataLoader,
3435
DataLoaderText2ImageMixin,
@@ -183,5 +184,3 @@ def _create_dataset(
183184
allow_video_files=True,
184185
vae_frame_dim=True,
185186
)
186-
187-
factory.register(BaseDataLoader, HunyuanVideoBaseDataLoader, ModelType.HUNYUAN_VIDEO)

modules/dataLoader/PixArtAlphaBaseDataLoader.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
from mgds.pipelineModules.Tokenize import Tokenize
2525

2626

27+
@factory.register(BaseDataLoader, ModelType.PIXART_ALPHA)
28+
@factory.register(BaseDataLoader, ModelType.PIXART_SIGMA)
2729
class PixArtAlphaBaseDataLoader(
2830
BaseDataLoader,
2931
DataLoaderText2ImageMixin,
@@ -159,6 +161,3 @@ def _create_dataset(
159161
config, model, model_setup, train_progress, is_validation,
160162
aspect_bucketing_quantization=16,
161163
)
162-
163-
factory.register(BaseDataLoader, PixArtAlphaBaseDataLoader, ModelType.PIXART_ALPHA)
164-
factory.register(BaseDataLoader, PixArtAlphaBaseDataLoader, ModelType.PIXART_SIGMA)

modules/dataLoader/QwenBaseDataLoader.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from mgds.pipelineModules.Tokenize import Tokenize
3131

3232

33+
@factory.register(BaseDataLoader, ModelType.QWEN)
3334
class QwenBaseDataLoader(
3435
BaseDataLoader,
3536
DataLoaderText2ImageMixin,
@@ -166,5 +167,3 @@ def _create_dataset(
166167
allow_video_files=False, #don't allow video files, but...
167168
vae_frame_dim=True, #...Qwen has a video-capable VAE. convert images to video dimensions
168169
)
169-
170-
factory.register(BaseDataLoader, QwenBaseDataLoader, ModelType.QWEN)

modules/dataLoader/SanaBaseDataLoader.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from mgds.pipelineModules.Tokenize import Tokenize
2424

2525

26+
@factory.register(BaseDataLoader, ModelType.SANA)
2627
class SanaBaseDataLoader(
2728
BaseDataLoader,
2829
DataLoaderText2ImageMixin,
@@ -152,5 +153,3 @@ def _create_dataset(
152153
config, model, model_setup, train_progress, is_validation,
153154
aspect_bucketing_quantization=32,
154155
)
155-
156-
factory.register(BaseDataLoader, SanaBaseDataLoader, ModelType.SANA)

0 commit comments

Comments
 (0)