axolotl-ai-cloud--axolotl
78ec5d9290
ci-cd / build-axolotl-uv (<nil>, 130, 13.0.0, linux/amd64,linux/arm64, 3.12, 2.11.0) (push) Has been cancelled
ci-cd / build-axolotl-uv (<nil>, 130, 13.0.0, true, linux/amd64,linux/arm64, 3.12, 2.12.0) (push) Has been cancelled
ci-cd / build-axolotl-cloud-uv (<nil>, 130, 13.0.0, linux/amd64,linux/arm64, 3.12, 2.11.0) (push) Has been cancelled
ci-cd / build-axolotl-cloud-uv (<nil>, 130, 13.0.0, true, linux/amd64,linux/arm64, 3.12, 2.12.0) (push) Has been cancelled
ci-cd / build-axolotl-cloud-no-tmux-uv (<nil>, 130, 13.0.0, linux/amd64,linux/arm64, 3.12, 2.11.0) (push) Has been cancelled
ci-cd / build-axolotl-cloud-no-tmux-uv (<nil>, 130, 13.0.0, true, linux/amd64,linux/arm64, 3.12, 2.12.0) (push) Has been cancelled
ci-cd-base / build-base-uv (130, 13.0.0, , Dockerfile-uv-base, linux/amd64,linux/arm64, 3.12, 2.12.0, 9.0 10.0 10.3 12.0+PTX) (push) Has been cancelled
ci-cd-base / build-base-uv (130, 13.0.0, , Dockerfile-uv-base, linux/amd64,linux/arm64, 3.12, 2.12.1, 9.0 10.0 10.3 12.0+PTX) (push) Has been cancelled
ci-cd-base / build-base-uv (130, 13.0.0, , Dockerfile-uv-base, linux/amd64,linux/arm64, 3.12, 2.13.0, 9.0 10.0 10.3 12.0+PTX) (push) Has been cancelled
ci-cd-base / build-base-uv (132, 13.2.1, , Dockerfile-uv-base, linux/amd64,linux/arm64, 3.12, 2.13.0, 9.0 10.0 10.3 12.0+PTX, https://download.pytorch.org/whl/cu132) (push) Has been cancelled
ci-cd-base / build-base-uv (130, 13.0.0, , Dockerfile-uv-base, linux/amd64,linux/arm64, 3.12, 2.11.0, 9.0 10.0 10.3 12.0+PTX) (push) Has been cancelled
Tests / PyTest (3.12, 2.12.1) (push) Has been cancelled
Tests / PyTest (3.12, 2.13.0) (push) Has been cancelled
docker-e2e-tests / gate-skip-e2e (push) Has been cancelled
docker-e2e-tests / docker-e2e-tests-1st (<nil>, 130, 13.0.0, 1, 3.12, 2.12.1) (push) Has been cancelled
docker-e2e-tests / docker-e2e-tests (<nil>, 130, 13.0.0, 1, 3.12, 2.11.0) (push) Has been cancelled
docker-e2e-tests / docker-e2e-kernel-tests (<nil>, 130, 13.0.0, 1, 3.12, 2.11.0) (push) Has been cancelled
docker-e2e-tests / docker-e2e-kernel-tests (<nil>, 130, 13.0.0, 1, 3.12, 2.12.1) (push) Has been cancelled
docker-e2e-tests / docker-e2e-cleanup (<nil>, 130, 13.0.0, 1, 3.12, 2.12.1) (push) Has been cancelled
Publish Docs / build-deploy (push) Has been cancelled
Tests / PyTest from Source Dist (3.12, 2.11.0) (push) Has been cancelled
Tests / PyTest from Source Dist (3.12, 2.12.1) (push) Has been cancelled
Tests / PyTest from Source Dist (3.12, 2.13.0) (push) Has been cancelled
Tests / pre-commit (push) Has been cancelled
Tests / Prefetch S3 once to prime the CDN cache (push) Has been cancelled
Tests / PyTest (3.12, 2.11.0) (push) Has been cancelled
91 行
3.0 KiB
Python
91 行
3.0 KiB
Python
"""Tests for the GCCallback"""
|
|
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from axolotl.utils.callbacks import GCCallback
|
|
|
|
|
|
class TestGCCallback:
|
|
"""Tests for GCCallback which handles Python gc.collect() during training."""
|
|
|
|
def test_init_with_gc_collect_steps(self):
|
|
cb = GCCallback(gc_collect_steps=10)
|
|
assert cb.gc_collect_steps == 10
|
|
|
|
def test_init_with_negative_gc_collect_steps(self):
|
|
cb = GCCallback(gc_collect_steps=-1)
|
|
assert cb.gc_collect_steps == -1
|
|
|
|
def test_init_with_legacy_gc_steps(self):
|
|
cb = GCCallback(gc_steps=5)
|
|
assert cb.gc_collect_steps == 5
|
|
|
|
def test_init_gc_collect_steps_overrides_gc_steps(self):
|
|
cb = GCCallback(gc_collect_steps=10, gc_steps=5)
|
|
assert cb.gc_collect_steps == 10
|
|
|
|
def test_init_default(self):
|
|
cb = GCCallback()
|
|
assert cb.gc_collect_steps == -1
|
|
|
|
@patch("axolotl.utils.callbacks.gc.collect")
|
|
@patch("axolotl.utils.callbacks.torch.cuda.empty_cache")
|
|
def test_gc_calls_collect_and_empty_cache(self, mock_empty_cache, mock_gc_collect):
|
|
cb = GCCallback(gc_collect_steps=1)
|
|
cb._gc()
|
|
mock_gc_collect.assert_called_once()
|
|
mock_empty_cache.assert_called_once()
|
|
|
|
@patch("axolotl.utils.callbacks.gc.collect")
|
|
@patch("axolotl.utils.callbacks.torch.cuda.empty_cache")
|
|
def test_on_step_end_periodic_gc(self, mock_empty_cache, mock_gc_collect):
|
|
cb = GCCallback(gc_collect_steps=5)
|
|
args = MagicMock()
|
|
args.save_strategy = "no"
|
|
state = MagicMock()
|
|
state.global_step = 10
|
|
state.save_steps = 0
|
|
state.max_steps = 100
|
|
control = MagicMock()
|
|
control.should_evaluate = False
|
|
|
|
cb.on_step_end(args, state, control)
|
|
|
|
# Step 10 % 5 == 0, so GC should have been called
|
|
mock_gc_collect.assert_called_once()
|
|
|
|
@patch("axolotl.utils.callbacks.gc.collect")
|
|
@patch("axolotl.utils.callbacks.torch.cuda.empty_cache")
|
|
def test_on_step_end_no_gc_when_not_on_interval(
|
|
self, mock_empty_cache, mock_gc_collect
|
|
):
|
|
cb = GCCallback(gc_collect_steps=5)
|
|
args = MagicMock()
|
|
args.save_strategy = "no"
|
|
state = MagicMock()
|
|
state.global_step = 7
|
|
state.save_steps = 0
|
|
state.max_steps = 100
|
|
control = MagicMock()
|
|
control.should_evaluate = False
|
|
|
|
cb.on_step_end(args, state, control)
|
|
|
|
# Step 7 % 5 != 0, so GC should not have been called
|
|
mock_gc_collect.assert_not_called()
|
|
|
|
@patch("axolotl.utils.callbacks.gc.collect")
|
|
@patch("axolotl.utils.callbacks.torch.cuda.empty_cache")
|
|
def test_on_step_end_gc_before_eval(self, mock_empty_cache, mock_gc_collect):
|
|
cb = GCCallback(gc_collect_steps=-1)
|
|
args = MagicMock()
|
|
state = MagicMock()
|
|
state.global_step = 3
|
|
control = MagicMock()
|
|
control.should_evaluate = True
|
|
|
|
cb.on_step_end(args, state, control)
|
|
|
|
mock_gc_collect.assert_called_once()
|
|
assert cb.next_gc_on_begin_step == 4
|