Skip to content

Commit 8fb80d7

Browse files
committed
perf(buffer): Reduced total training time by 63%.
Buffer tensor copying created massive overhead in terms of compute time. Improved buffers to store tensors directly onto GPUs with pre-defined capacity in advance. Drastically improves efficiency of buffers and reduces training times.
1 parent 257de0c commit 8fb80d7

File tree

11 files changed

+379
-334
lines changed

11 files changed

+379
-334
lines changed

tests/models/test_ddpg.py

+9-12
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import torch
1111
import gymnasium as gym
1212

13-
from velora.buffer.experience import Experience
1413
from velora.callbacks import CometAnalytics, EarlyStopping, SaveCheckpoints
1514
from velora.metrics.models import Episode
1615
from velora.models import LiquidNCPNetwork
@@ -117,13 +116,11 @@ def ddpg(self, ddpg_params: DDPGParamsType) -> LiquidDDPG:
117116
def env(self) -> gym.Env:
118117
return gym.make("InvertedPendulum-v5", render_mode="rgb_array")
119118

120-
def test_init(self, ddpg: LiquidDDPG, ddpg_params: DDPGParamsType):
119+
def test_init(self, ddpg: LiquidDDPG):
121120
assert isinstance(ddpg.actor, DDPGActor)
122121
assert isinstance(ddpg.critic, DDPGCritic)
123122
assert isinstance(ddpg.actor_target, DDPGActor)
124123
assert isinstance(ddpg.critic_target, DDPGCritic)
125-
assert len(ddpg.buffer) == 0
126-
assert ddpg.buffer.capacity == ddpg_params["buffer_size"]
127124

128125
def test_update_target_networks(self, ddpg: LiquidDDPG):
129126
tau = 0.005
@@ -170,9 +167,7 @@ def test_train_step(self, ddpg: LiquidDDPG):
170167
next_state = torch.zeros(ddpg.state_dim)
171168
done = False
172169

173-
# Create Experience object explicitly
174-
exp = Experience(state, action, reward, next_state, done)
175-
ddpg.buffer.add(exp)
170+
ddpg.buffer.add(state, action, reward, next_state, done)
176171

177172
# Perform training step
178173
result = ddpg._train_step(batch_size, gamma)
@@ -188,9 +183,12 @@ def test_train_step_insufficient_buffer(self, ddpg: LiquidDDPG):
188183

189184
# Add fewer experiences than batch_size
190185
for _ in range(batch_size - 1):
191-
state = torch.zeros(ddpg.state_dim)
192-
exp = Experience(state, 1.0, 2.0, state, False)
193-
ddpg.buffer.add(exp)
186+
state = torch.zeros([ddpg.state_dim])
187+
action = torch.tensor([1.0])
188+
reward = 2.0
189+
next_state = torch.zeros(ddpg.state_dim)
190+
done = False
191+
ddpg.buffer.add(state, action, reward, next_state, done)
194192

195193
# Should return None when buffer is insufficient
196194
result = ddpg._train_step(batch_size, gamma)
@@ -227,8 +225,7 @@ def test_save_load_with_buffer(self, ddpg: LiquidDDPG):
227225
reward = float(i * 0.5)
228226
next_state = torch.ones(ddpg.state_dim)
229227
done = i == 9
230-
exp = Experience(state, action, reward, next_state, done)
231-
ddpg.buffer.add(exp)
228+
ddpg.buffer.add(state, action, reward, next_state, done)
232229

233230
with tempfile.TemporaryDirectory() as temp_dir:
234231
filepath = os.path.join(temp_dir, "model.pt")

0 commit comments

Comments
 (0)