test_adam_acuracy.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import argparse
  2. import torch
  3. import time
  4. import numpy as np
  5. import pytest
  6. import copy
  7. import deepspeed
  8. from deepspeed.ops.adam import DeepSpeedCPUAdam
  9. if not deepspeed.ops.__installed_ops__['cpu-adam']:
  10. pytest.skip("cpu-adam is not installed", allow_module_level=True)
  11. def check_equal(first, second, atol=1e-2, verbose=False):
  12. x = first.detach().numpy()
  13. y = second.detach().numpy()
  14. if verbose:
  15. print("x = {}".format(x.flatten()))
  16. print("y = {}".format(y.flatten()))
  17. print('-' * 80)
  18. np.testing.assert_allclose(x, y, err_msg="param-update dismatch!", atol=atol)
  19. @pytest.mark.parametrize('model_size',
  20. [
  21. (64),
  22. (22),
  23. (55),
  24. (127),
  25. (1024),
  26. (1048576),
  27. ]) # yapf: disable
  28. def test_adam_opt(model_size):
  29. device = 'cpu'
  30. rng_state = torch.get_rng_state()
  31. param = torch.nn.Parameter(torch.randn(model_size, device=device))
  32. torch.set_rng_state(rng_state)
  33. param1 = torch.nn.Parameter(torch.randn(model_size, device=device))
  34. optimizer1 = torch.optim.Adam([param1])
  35. optimizer = DeepSpeedCPUAdam([param])
  36. for i in range(10):
  37. rng_state = torch.get_rng_state()
  38. param.grad = torch.randn(model_size, device=device)
  39. torch.set_rng_state(rng_state)
  40. param1.grad = torch.randn(model_size, device=device)
  41. optimizer.step()
  42. optimizer1.step()
  43. check_equal(param, param1, atol=1e-2, verbose=True)