1212# See the License for the specific language governing permissions and
1313# limitations under the License.
1414
15- from copy import deepcopy
15+ import logging
1616from typing import Any , Dict , Literal , Optional
1717
1818from megatron .core import parallel_state
1919from megatron .energon import WorkerConfig , get_savable_loader , get_train_dataset
20- from torch .utils .data import DataLoader
21- from typing_extensions import Self
22- import logging
20+
21+
2322logger = logging .getLogger (__name__ )
2423
2524
@@ -107,7 +106,7 @@ def __init__(
107106 self .multimodal_sample_config = multimodal_sample_config
108107 self .shuffle_buffer_size = shuffle_buffer_size
109108 self .max_samples_per_sequence = max_samples_per_sequence
110- self .task_encoder = task_encoder
109+ self .task_encoder = task_encoder
111110 self .init_global_step = 0
112111 self .train_dataloader_object = None
113112 self .val_dataloader_object = None
@@ -116,8 +115,7 @@ def __init__(
116115 self .num_val_workers = num_val_workers or self .num_workers
117116 self .kwargs = kwargs
118117
119-
120- def datasets_provider (self , worker_config , split : Literal ['train' , 'val' ] = 'val' ):
118+ def datasets_provider (self , worker_config , split : Literal ["train" , "val" ] = "val" ):
121119 """
122120 Provide the dataset for training or validation.
123121
@@ -132,7 +130,7 @@ def datasets_provider(self, worker_config, split: Literal['train', 'val'] = 'val
132130 Dataset: The dataset configured for the specified split.
133131 """
134132
135- if split not in {' train' , ' val' }:
133+ if split not in {" train" , " val" }:
136134 raise ValueError ("Invalid value for split. Allowed values are 'train' or 'val'." )
137135
138136 if split == "train" :
@@ -194,7 +192,7 @@ def train_dataloader(self) -> Any:
194192 worker_debug_path = None ,
195193 worker_log_level = 0 ,
196194 )
197- train_dataset = self .datasets_provider (worker_config , split = ' train' )
195+ train_dataset = self .datasets_provider (worker_config , split = " train" )
198196 energon_dataloader = get_savable_loader (train_dataset , worker_config = worker_config )
199197 self .train_dataloader_object = energon_dataloader
200198 return self .train_dataloader_object
@@ -232,7 +230,7 @@ def val_dataloader(self):
232230 worker_debug_path = None ,
233231 worker_log_level = 0 ,
234232 )
235- val_dataset = self .datasets_provider (worker_config , split = ' val' )
233+ val_dataset = self .datasets_provider (worker_config , split = " val" )
236234 energon_loader = get_savable_loader (val_dataset , worker_config = worker_config )
237235 self .val_dataloader_object = energon_loader
238236 return self .val_dataloader_object
@@ -285,7 +283,7 @@ def state_dict(self) -> Dict[str, Any]:
285283 state = [] # Megatron core requires all the states on all the ranks to have same python
286284 # type. Energon sends the state as a list
287285 logger .info (f"Multimodal data loader saving dataloader state dict consumed samples { consumed_samples } " )
288- return {' dataloader_state' : state , ' consumed_samples' : consumed_samples }
286+ return {" dataloader_state" : state , " consumed_samples" : consumed_samples }
289287
290288 logger .warning ("trainer object not connected to data module object returning empty state" )
291289 return {}
@@ -300,14 +298,14 @@ def load_state_dict(self, state_dict: Dict[str, Any]) -> None:
300298 Parameters:
301299 state_dict (Dict[str, Any]): The state dictionary containing the saved state of the data module.
302300 """
303- if not ' dataloader_state' in state_dict :
301+ if not " dataloader_state" in state_dict :
304302 logger .warning (
305303 f"Data loader state cannot be resumed from state_dict, "
306304 f"it does not have the required key dataloader_state. It has { state_dict .keys ()} "
307305 )
308306 return
309307
310- state = state_dict [' dataloader_state' ]
308+ state = state_dict [" dataloader_state" ]
311309 try :
312310 if self .trainer :
313311 self .trainer .datamodule .train_dataloader ().restore_state_global (state )
@@ -331,13 +329,11 @@ def load_state_dict(self, state_dict: Dict[str, Any]) -> None:
331329 logger .warning ("Megatron num_microbatches_calculator not found, using Apex version." )
332330 from apex .transformer .pipeline_parallel .utils import update_num_microbatches
333331
334- consumed_samples = state_dict [' consumed_samples' ]
332+ consumed_samples = state_dict [" consumed_samples" ]
335333 self .data_sampler .init_consumed_samples = consumed_samples
336334 self .data_sampler .prev_consumed_samples = consumed_samples
337335 logger .info (f"Multimodal dataloader load state dict with consumed_samples { consumed_samples } " )
338336 update_num_microbatches (
339337 consumed_samples = consumed_samples ,
340338 consistency_check = False ,
341339 )
342-
343-
0 commit comments