Skip to content

Commit 192d721

Browse files
solves AttributeError: 'State' object has no attribute 'rng_states' (#2412)
* solves AttributeError: 'State' object has no attribute 'rng_states' * update state_dict * trying test_state_dict in deterministic Engine * autopep8 fix * update test_deterministic.py * Update test_deterministic.py * autopep8 fix * update deterministic.py * update deterministic.py Co-authored-by: bibhabasumohapatra <[email protected]>
1 parent e452884 commit 192d721

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

ignite/engine/deterministic.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,8 @@ class DeterministicEngine(Engine):
179179
def __init__(self, process_function: Callable[[Engine, Any], Any]):
180180
super(DeterministicEngine, self).__init__(process_function)
181181
self.state_dict_user_keys.append("rng_states")
182+
if not hasattr(self.state, "rng_states"):
183+
setattr(self.state, "rng_states", None)
182184
self.add_event_handler(Events.STARTED, self._init_run)
183185
self.add_event_handler(Events.DATALOADER_STOP_ITERATION | Events.TERMINATE_SINGLE_EPOCH, self._setup_seed)
184186

@@ -189,9 +191,6 @@ def state_dict(self) -> OrderedDict:
189191

190192
def _init_run(self) -> None:
191193
self.state.seed = int(torch.randint(0, int(1e9), (1,)).item())
192-
if not hasattr(self.state, "rng_states"):
193-
setattr(self.state, "rng_states", None)
194-
195194
if torch.cuda.is_available():
196195
torch.backends.cudnn.deterministic = True
197196
torch.backends.cudnn.benchmark = False

tests/ignite/engine/test_deterministic.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
import random
33
import sys
4+
from collections.abc import Mapping
45
from unittest.mock import patch
56

67
import numpy as np
@@ -893,3 +894,13 @@ def test_engine_no_data_asserts():
893894

894895
with pytest.raises(ValueError, match=r"Deterministic engine does not support the option of data=None"):
895896
trainer.run(max_epochs=10, epoch_length=10)
897+
898+
899+
def test_state_dict():
900+
engine = DeterministicEngine(lambda e, b: 1)
901+
sd = engine.state_dict()
902+
assert isinstance(sd, Mapping) and len(sd) == 4
903+
assert "iteration" in sd and sd["iteration"] == 0
904+
assert "max_epochs" in sd and sd["max_epochs"] is None
905+
assert "epoch_length" in sd and sd["epoch_length"] is None
906+
assert "rng_states" in sd and sd["rng_states"] is not None

0 commit comments

Comments
 (0)