Skip to content

Commit 0241d88

Browse files
committed
Fix LSTM, add cuda warmup const
1 parent 03c2962 commit 0241d88

2 files changed

Lines changed: 30 additions & 6 deletions

File tree

src/engine/server/NN/ModelManager.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ torch::Tensor graph_old_current_sampled_tensor, graph_current_sampled_tensor;
8888
torch::Tensor graph_log_probs_tensor;
8989
at::cuda::CUDAGraph graph;
9090
at::cuda::CUDAStream graph_stream = at::cuda::getStreamFromPool();
91+
int cuda_warmup_iterations = 5;
9192

9293
VT states;
9394
VT actions;
@@ -701,7 +702,7 @@ std::vector<ModelOutput> ModelManager::Decide(
701702

702703
measure_time = std::chrono::high_resolution_clock::now();
703704
//printf("A\n");
704-
if(!graph_recorded && warmup_index >= 3)
705+
if(!graph_recorded && warmup_index >= cuda_warmup_iterations)
705706
{
706707
graph_stream.synchronize();
707708
graph.capture_begin();
@@ -759,7 +760,7 @@ std::vector<ModelOutput> ModelManager::Decide(
759760
graph.capture_end();
760761
graph_recorded = true;
761762
}
762-
else if(!graph_recorded && warmup_index < 3)
763+
else if(!graph_recorded && warmup_index < cuda_warmup_iterations)
763764
{
764765
//printf("RR1\n");
765766
// Enable autocast

src/engine/server/NN/ProximalPolicyOptimization.h

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,13 @@ class ReplayBuffer
137137
if(capacity() - dones.size() >= players_states[i].size())
138138
{
139139
//printf("Saving...\n");
140-
auto stacked = torch::stack(players_states[i]);
140+
torch::Tensor stacked = torch::stack(players_states[i]);
141+
int64_t T = stacked.size(0);
142+
int64_t remainder = T % seq_len;
143+
if(remainder != 0)
144+
{
145+
stacked = stacked.slice(0, remainder, T);
146+
}
141147
//while(true)
142148
//{
143149
// stacked = torch::stack(players_states[i]);
@@ -150,31 +156,48 @@ class ReplayBuffer
150156
//printf("2\n");
151157

152158
stacked = torch::stack(players_actions[i]);
159+
if(remainder != 0)
160+
{
161+
stacked = stacked.slice(0, remainder, T);
162+
}
153163
//printf("2.1\n");
154164
//actions.index({(long long)(dones.size())}).copy_(stacked, true);
155165
actions.index({torch::indexing::Slice(dones.size(), dones.size() + stacked.size(0))}).copy_(stacked, true);
156166
players_actions[i].clear();
157167
//printf("3\n");
158168

159169
stacked = torch::stack(players_log_probs[i]);
170+
if(remainder != 0)
171+
{
172+
stacked = stacked.slice(0, remainder, T);
173+
}
160174
log_probs.index({torch::indexing::Slice(dones.size(), dones.size() + stacked.size(0))}).copy_(stacked, true);
161175
//log_probs.index({(long long)(dones.size())}).copy_(stacked, true);
162176
players_log_probs[i].clear();
163177
//printf("4\n");
164178

165179
stacked = torch::stack(players_h_lstm[i]);
180+
if(remainder != 0)
181+
{
182+
stacked = stacked.slice(0, remainder, T);
183+
}
166184
h_lstm.index({0, torch::indexing::Slice(dones.size(), dones.size() + stacked.size(0))}).copy_(stacked, true);
167185
players_h_lstm[i].clear();
168186

169187
stacked = torch::stack(players_c_lstm[i]);
188+
if(remainder != 0)
189+
{
190+
stacked = stacked.slice(0, remainder, T);
191+
}
170192
c_lstm.index({0, torch::indexing::Slice(dones.size(), dones.size() + stacked.size(0))}).copy_(stacked, true);
171193
players_c_lstm[i].clear();
172194

173-
rewards.insert(rewards.end(), players_rewards[i].begin(), players_rewards[i].end());
195+
rewards.insert(rewards.end(), players_rewards[i].begin() + remainder, players_rewards[i].end());
196+
accumulation_resets.insert(accumulation_resets.end(), players_accumulation_resets[i].begin() + remainder, players_accumulation_resets[i].end());
197+
dones.insert(dones.end(), players_dones[i].begin() + remainder, players_dones[i].end());
198+
174199
players_rewards[i].clear();
175-
accumulation_resets.insert(accumulation_resets.end(), players_accumulation_resets[i].begin(), players_accumulation_resets[i].end());
176200
players_accumulation_resets[i].clear();
177-
dones.insert(dones.end(), players_dones[i].begin(), players_dones[i].end());
178201
players_dones[i].clear();
179202
//printf("Saved.\n");
180203
count_episodes += 1;

0 commit comments

Comments
 (0)