Buckets:
| from __future__ import annotations | |
| import sys | |
| import unittest | |
| import inspect | |
| from pathlib import Path | |
| from types import SimpleNamespace | |
| sys.path.insert(0, str(Path(__file__).resolve().parents[1])) | |
| from training.hf_runtime_deps import BASE_RUNTIME_PACKAGES, TRL_RUNTIME_PACKAGES, runtime_packages | |
| from training import hf_fingpt_train | |
| from training.hf_fingpt_train import gradient_parameter_summary, trainable_parameter_summary | |
| class HfRuntimeDependencyPinsTest(unittest.TestCase): | |
| def test_transformers_is_bounded_below_float8_e8m0fnu_requirement(self) -> None: | |
| # transformers>=4.54 imports torch.float8_e8m0fnu, absent from the | |
| # torch 2.6 HF Jobs image; the pin must stay below that boundary. | |
| transformers = [item for item in BASE_RUNTIME_PACKAGES if item.startswith("transformers")] | |
| self.assertEqual(transformers, ["transformers>=4.51.0,<4.54.0"]) | |
| def test_runtime_packages_are_version_constrained(self) -> None: | |
| for package in runtime_packages(include_trl=True): | |
| self.assertIn(">=", package, package) | |
| self.assertIn("<", package, package) | |
| def test_eval_stack_excludes_trl_but_training_stack_includes_it(self) -> None: | |
| self.assertNotIn(TRL_RUNTIME_PACKAGES[0], runtime_packages(include_trl=False)) | |
| self.assertIn(TRL_RUNTIME_PACKAGES[0], runtime_packages(include_trl=True)) | |
| def test_trainable_parameter_summary_detects_trainable_lora_params(self) -> None: | |
| class FakeParam: | |
| def __init__(self, count: int, requires_grad: bool) -> None: | |
| self._count = count | |
| self.requires_grad = requires_grad | |
| def numel(self) -> int: | |
| return self._count | |
| model = SimpleNamespace( | |
| named_parameters=lambda: iter( | |
| [ | |
| ("base_model.model.layers.0.self_attn.q_proj.base_layer.weight", FakeParam(1000, False)), | |
| ("base_model.model.layers.0.self_attn.q_proj.lora_A.default.weight", FakeParam(160, True)), | |
| ("base_model.model.layers.0.self_attn.q_proj.lora_B.default.weight", FakeParam(160, True)), | |
| ] | |
| ) | |
| ) | |
| summary = trainable_parameter_summary(model) | |
| self.assertTrue(summary["ok"]) | |
| self.assertEqual(summary["total_params"], 1320) | |
| self.assertEqual(summary["trainable_params"], 320) | |
| self.assertEqual(summary["trainable_tensors"], 2) | |
| def test_gradient_parameter_summary_requires_nonzero_lora_gradient(self) -> None: | |
| class FakeGrad: | |
| def __init__(self, value: float) -> None: | |
| self.value = value | |
| def detach(self) -> "FakeGrad": | |
| return self | |
| def float(self) -> "FakeGrad": | |
| return self | |
| def norm(self) -> "FakeGrad": | |
| return self | |
| def item(self) -> float: | |
| return self.value | |
| class FakeParam: | |
| def __init__(self, requires_grad: bool, grad_value: float | None) -> None: | |
| self.requires_grad = requires_grad | |
| self.grad = None if grad_value is None else FakeGrad(grad_value) | |
| model = SimpleNamespace( | |
| named_parameters=lambda: iter( | |
| [ | |
| ("base_model.model.layers.0.self_attn.q_proj.base_layer.weight", FakeParam(False, None)), | |
| ("base_model.model.layers.0.self_attn.q_proj.lora_A.default.weight", FakeParam(True, 0.0)), | |
| ("base_model.model.layers.0.self_attn.q_proj.lora_B.default.weight", FakeParam(True, 0.25)), | |
| ] | |
| ) | |
| ) | |
| summary = gradient_parameter_summary(model) | |
| self.assertTrue(summary["ok"]) | |
| self.assertEqual(summary["trainable_tensors"], 2) | |
| self.assertEqual(summary["grad_tensors"], 2) | |
| self.assertEqual(summary["nonzero_grad_tensors"], 1) | |
| self.assertEqual(summary["lora_trainable_tensors"], 2) | |
| self.assertEqual(summary["lora_nonzero_grad_tensors"], 1) | |
| def test_gradient_parameter_summary_blocks_all_zero_lora_gradients(self) -> None: | |
| class FakeGrad: | |
| def detach(self) -> "FakeGrad": | |
| return self | |
| def float(self) -> "FakeGrad": | |
| return self | |
| def norm(self) -> "FakeGrad": | |
| return self | |
| def item(self) -> float: | |
| return 0.0 | |
| class FakeParam: | |
| requires_grad = True | |
| grad = FakeGrad() | |
| model = SimpleNamespace( | |
| named_parameters=lambda: iter( | |
| [ | |
| ("base_model.model.layers.0.self_attn.q_proj.lora_A.default.weight", FakeParam()), | |
| ("base_model.model.layers.0.self_attn.q_proj.lora_B.default.weight", FakeParam()), | |
| ] | |
| ) | |
| ) | |
| summary = gradient_parameter_summary(model) | |
| self.assertFalse(summary["ok"]) | |
| self.assertEqual(summary["nonzero_grad_tensors"], 0) | |
| self.assertEqual(summary["lora_nonzero_grad_tensors"], 0) | |
| def test_training_uses_non_reentrant_gradient_checkpointing(self) -> None: | |
| source = inspect.getsource(hf_fingpt_train.run_live_training) | |
| self.assertIn('gradient_checkpointing_kwargs={"use_reentrant": False}', source) | |
| def test_zero_gradient_stall_guard_is_hard_halt_enabled(self) -> None: | |
| source = inspect.getsource(hf_fingpt_train.run_live_training) | |
| self.assertIn("ZeroGradientStallCallback(local_metrics_path, hard_halt_enabled=True)", source) | |
| self.assertNotIn("ZeroGradientStallCallback(local_metrics_path, hard_halt_enabled=False)", source) | |
| if __name__ == "__main__": | |
| unittest.main() | |
Xet Storage Details
- Size:
- 5.74 kB
- Xet hash:
- 65947724e7ceff387e55e626f518167dc9843ddc9e85bd8a9c53e157a3f27a67
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.