1515"""Mock data module for FLUX model training."""
1616
1717from dataclasses import dataclass
18+ from itertools import chain , repeat
1819
1920import torch
2021from torch .utils .data import DataLoader , Dataset
@@ -219,7 +220,7 @@ class FluxMockDataModuleConfig(DatasetProvider):
219220
220221 def __post_init__ (self ):
221222 """Initialize the mock dataset and dataloader."""
222- mock_ds = _MockT2IDataset (
223+ self . _mock_ds = _MockT2IDataset (
223224 image_H = self .image_H ,
224225 image_W = self .image_W ,
225226 length = self .num_train_samples ,
@@ -232,13 +233,19 @@ def __post_init__(self):
232233 vae_channels = self .vae_channels ,
233234 )
234235
236+ self ._train_dl = self ._build_dataloader ()
237+ self ._valid_dl = self ._build_dataloader ()
238+ self ._test_dl = self ._build_dataloader ()
239+ self .sequence_length = self .seq_length
240+
241+ def _build_dataloader (self ) -> DataLoader :
235242 kwargs = {}
236243 if self .num_workers > 0 :
237244 kwargs ["prefetch_factor" ] = 8
238245 kwargs ["persistent_workers" ] = True
239246
240- self . _train_dl = DataLoader (
241- mock_ds ,
247+ return DataLoader (
248+ self . _mock_ds ,
242249 batch_size = self .micro_batch_size ,
243250 num_workers = self .num_workers ,
244251 collate_fn = _collate_fn ,
@@ -247,10 +254,10 @@ def __post_init__(self):
247254 pin_memory = True ,
248255 ** kwargs ,
249256 )
250- self ._train_dl_iter = iter (self ._train_dl )
251- self .sequence_length = self .seq_length
252257
253258 def build_datasets (self , _context : DatasetBuildContext ):
254259 """Build and return train/val/test dataloaders."""
255- # Return iterator for external dataloader type
256- return self ._train_dl_iter , self ._train_dl_iter , self ._train_dl_iter
260+ # Reiterate each loader without caching generated batches in host memory.
261+ return tuple (
262+ chain .from_iterable (repeat (dataloader )) for dataloader in (self ._train_dl , self ._valid_dl , self ._test_dl )
263+ )
0 commit comments