@@ -245,6 +245,45 @@ def test_live_slice_indices(self):
245245 indices = elastic_utils .live_slice_indices (config )
246246 self .assertEqual (indices , {0 , 1 })
247247
248+ def _base_mtc_keys (self , ** overrides ):
249+ keys = {
250+ "elastic_enabled" : True ,
251+ "mtc_data_parallelism" : 1 ,
252+ "num_slices" : 2 ,
253+ }
254+ keys .update (overrides )
255+ return keys
256+
257+ def test_single_controller_mtc_init_kwargs_uses_active_elastic_devices (self ):
258+ self .fake_pathwaysutils .is_pathways_backend_used .return_value = True
259+ device0 = FakeDevice (slice_index = 0 )
260+ device1 = FakeDevice (slice_index = 1 )
261+ self .fake_jax .devices .return_value = [device0 , device1 ]
262+ self .fake_manager .active_slice_indices = {0 }
263+
264+ kwargs = elastic_utils .single_controller_mtc_init_kwargs (self ._base_mtc_keys (mtc_data_parallelism = 0 ))
265+
266+ self .assertEqual (kwargs ["devices" ], (device0 ,))
267+ self .assertEqual (kwargs ["num_slices" ], 1 )
268+ self .assertEqual (kwargs ["data_parallelism" ], 1 )
269+
270+ def test_single_controller_mtc_init_kwargs_raises_if_empty (self ):
271+ self .fake_pathwaysutils .is_pathways_backend_used .return_value = True
272+ device0 = FakeDevice (slice_index = 0 )
273+ self .fake_jax .devices .return_value = [device0 ]
274+ self .fake_manager .active_slice_indices = {1 }
275+
276+ with self .assertRaisesRegex (ValueError , "Elastic single-controller MTC initialization found no active devices." ):
277+ elastic_utils .single_controller_mtc_init_kwargs (self ._base_mtc_keys ())
278+
279+ def test_single_controller_mtc_init_kwargs_non_elastic (self ):
280+ kwargs = elastic_utils .single_controller_mtc_init_kwargs (
281+ self ._base_mtc_keys (elastic_enabled = False , mtc_data_parallelism = 3 , num_slices = 4 )
282+ )
283+
284+ self .assertEqual (kwargs , {"data_parallelism" : 3 , "num_slices" : 4 })
285+ self .assertIsNone (elastic_utils .elastic_manager )
286+
248287 def test_get_devices_per_host (self ):
249288 device0 = FakeDevice (slice_index = 0 , process_index = 0 , task_id = 0 )
250289 device1 = FakeDevice (slice_index = 0 , process_index = 0 , task_id = 0 )
0 commit comments