77from modules .util import factory
88from modules .util .config .TrainConfig import TrainConfig
99from modules .util .enum .ModelType import ModelType
10- from modules .util .thread_safety import apply_thread_safe_forward
1110from modules .util .TrainProgress import TrainProgress
1211
1312from mgds .pipelineModules .DecodeTokens import DecodeTokens
1413from mgds .pipelineModules .DecodeVAE import DecodeVAE
1514from mgds .pipelineModules .EncodeMistralText import EncodeMistralText
1615from mgds .pipelineModules .EncodeVAE import EncodeVAE
16+ from mgds .pipelineModules .PadMaskedTokens import PadMaskedTokens
17+ from mgds .pipelineModules .PruneMaskedTokens import PruneMaskedTokens
1718from mgds .pipelineModules .RescaleImageChannels import RescaleImageChannels
1819from mgds .pipelineModules .SampleVAEDistribution import SampleVAEDistribution
1920from mgds .pipelineModules .SaveImage import SaveImage
2223from mgds .pipelineModules .Tokenize import Tokenize
2324
2425
26+ @factory .register (BaseDataLoader , ModelType .ERNIE )
2527class 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 )
0 commit comments