test_data.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from deepspeed.utils import RepeatingLoader
  2. import torch
  3. import pytest
  4. import deepspeed
  5. from .common import distributed_test
  6. from .simple_model import SimpleModel, args_from_dict, random_dataset
  7. def test_repeating_loader():
  8. loader = [1, 2, 3]
  9. loader = RepeatingLoader(loader)
  10. for idx in range(50):
  11. assert next(loader) == 1
  12. assert next(loader) == 2
  13. assert next(loader) == 3
  14. @pytest.mark.parametrize('train_batch_size, drop_last',
  15. [(1,
  16. True),
  17. (4,
  18. True),
  19. (1,
  20. False),
  21. (4,
  22. False)])
  23. def test_dataloader_drop_last(tmpdir, train_batch_size, drop_last):
  24. config_dict = {
  25. "train_batch_size": train_batch_size,
  26. "dataloader_drop_last": drop_last,
  27. "steps_per_print": 1
  28. }
  29. args = args_from_dict(tmpdir, config_dict)
  30. hidden_dim = 10
  31. model = SimpleModel(hidden_dim)
  32. @distributed_test(world_size=[1])
  33. def _test_dataloader_drop_last(args, model, hidden_dim):
  34. optimizer = torch.optim.AdamW(params=model.parameters())
  35. #TODO: Figure out why this breaks with cuda device
  36. train_dataset = random_dataset(total_samples=50,
  37. hidden_dim=hidden_dim,
  38. device=torch.device('cpu'),
  39. dtype=torch.float32)
  40. model, _, training_dataloader, _ = deepspeed.initialize(args=args,
  41. model=model,
  42. training_data=train_dataset,
  43. optimizer=optimizer)
  44. for n, batch in enumerate(training_dataloader):
  45. x = batch[0].to(torch.cuda.current_device())
  46. y = batch[1].to(torch.cuda.current_device())
  47. loss = model(x, y)
  48. model.backward(loss)
  49. model.step()
  50. _test_dataloader_drop_last(args=args, model=model, hidden_dim=hidden_dim)