Files
mlx-lm/tests/test_tuner_trainer.py
Awni Hannun 6c1a459314 DWQ for very large models (#536)
* pipeline parallel mixin

* Refactor pipeline parallel, add optional target saving to DWQ

* preserve batch order

* Fixes

* fix glm4 pipeline

* event timeout hack

* use full targets for regular training
2025-11-07 06:43:40 -08:00

55 lines
1.2 KiB
Python

# Copyright © 2025 Apple Inc.
import unittest
import mlx.core as mx
from mlx_lm.tuner.trainer import iterate_batches
class MockDistributedGroup:
def __init__(self, rank, size):
self._rank = rank
self._size = size
def rank(self):
return self._rank
def size(self):
return self._size
class TestTunerTrainer(unittest.TestCase):
def test_iterate_batches_ddp(self):
group = MockDistributedGroup(0, 1)
def run(rank, size, batch):
group._rank = rank
group._size = size
data = mx.arange(128).reshape(-1, 1).tolist()
data = [(d, 0) for d in data]
samples = set()
for i, (b, l) in enumerate(
iterate_batches(data, batch, 1, comm_group=group)
):
samples.add(tuple(mx.flatten(b).tolist()))
ref_batches = mx.arange(128).reshape(-1, batch).tolist()
for b in ref_batches:
self.assertTrue(tuple(b[rank::size]) in samples)
run(0, 1, 4)
run(0, 1, 8)
run(0, 2, 8)
run(1, 2, 8)
run(0, 4, 8)
run(1, 4, 8)
run(2, 4, 8)
run(3, 4, 8)
if __name__ == "__main__":
unittest.main()