dbmoe / test_apple_native.py
MarxistLeninist's picture
SG verified artifact 8d348b02a9ba5f4a
ae3fb42 verified
Raw History Blame Contribute Delete
3.56 kB
"""Numerical contract only. These tests do not run Swift, Metal or an Apple app."""
import importlib.util
import json
import math
from pathlib import Path
import unittest
import torch
ROOT = Path(__file__).resolve().parent
SPEC = importlib.util.spec_from_file_location('native_reference', ROOT / 'apple/generate_parity_fixture.py')
GENERATOR = importlib.util.module_from_spec(SPEC)
SPEC.loader.exec_module(GENERATOR)
class NativeNumericalReferenceTests(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.fixture = json.loads((ROOT / 'apple/parity.json').read_text())
cls.actual = GENERATOR.generate(ROOT / 'dbmoe.py')
def test_fixture_contains_only_finite_json(self):
json.dumps(self.fixture, allow_nan=False)
self.assertEqual(self.fixture['format'], 'dbmoe.native.parity.v1')
def test_fixture_has_explicit_noise_and_both_experts(self):
self.assertEqual(self.fixture['batch'], self.actual['batch'])
self.assertEqual(self.fixture['sigma'], self.actual['sigma'])
self.assertEqual(self.fixture['epsilon'], self.actual['epsilon'])
self.assertEqual(self.fixture['cfg'], self.actual['cfg'])
self.assertEqual(self.fixture['expected']['expert_fractions'][0]['data'], [.5, .5])
def test_losses_gradients_and_adamw_step_replay(self):
expected, actual = self.fixture['expected'], self.actual['expected']
for name in ('loss', 'ce', 'auxiliary', 'gradient_norm_before_clip'):
self.assertTrue(math.isclose(expected[name], actual[name], rel_tol=1e-5, abs_tol=1e-6), name)
for section in ('initial',):
self.assertEqual(self.fixture[section], self.actual[section])
for section in ('gradients', 'clipped_gradients', 'after_step', 'deltas'):
self.assertEqual(set(expected[section]), set(actual[section]))
for name, ref in expected[section].items():
got = actual[section][name]
if ref is None:
self.assertIsNone(got, name)
continue
self.assertEqual(ref['shape'], got['shape'], name)
self.assertEqual(ref['dtype'], got['dtype'], name)
torch.testing.assert_close(torch.tensor(ref['data']), torch.tensor(got['data']),
rtol=1e-5, atol=1e-6, msg=section + ': ' + name)
for name in ('denoised', 'logits'):
torch.testing.assert_close(torch.tensor(expected[name]['data']), torch.tensor(actual[name]['data']),
rtol=1e-5, atol=1e-6, msg=name)
def test_attention_and_clipping_are_exercised(self):
expected = self.fixture['expected']
self.assertGreater(expected['gradient_norm_before_clip'], 1.)
qkv = expected['gradients']['block.layers.0.qkv.weight']['data']
self.assertGreater(max(abs(x) for x in qkv), 1e-8)
deltas = expected['deltas']['block.layers.0.qkv.weight']['data']
self.assertGreater(max(abs(x) for x in deltas), 1e-8)
def test_optional_skewed_fixture_exercises_unequal_usage(self):
result = GENERATOR.generate(ROOT / 'dbmoe.py', skewed=True)
expected = result['expected']
self.assertEqual(sorted(expected['expert_fractions'][0]['data']), [.25, .75])
self.assertGreater(abs(expected['auxiliary'] - 1.), 1e-3)
self.assertAlmostEqual(expected['loss'], 3.6444308757781982, places=5)
json.dumps(result, allow_nan=False)
if __name__ == '__main__':
unittest.main()