diff --git a/crates/ml/src/hyperopt/adapters/dqn.rs b/crates/ml/src/hyperopt/adapters/dqn.rs index 9799b35bc..35a049315 100644 --- a/crates/ml/src/hyperopt/adapters/dqn.rs +++ b/crates/ml/src/hyperopt/adapters/dqn.rs @@ -878,7 +878,10 @@ impl DQNTrainer { let mut preload_hyperparams = DQNHyperparameters::default(); preload_hyperparams.mbp10_data_dir = self.mbp10_data_dir.clone().unwrap_or_default(); preload_hyperparams.trades_data_dir = self.trades_data_dir.clone().unwrap_or_default(); - preload_hyperparams.buffer_size = 1; + // Buffer size must be >= batch_size for GPU PER allocation. + // Preload doesn't train — just loads data — but the trainer + // constructor still creates a PER buffer. + preload_hyperparams.buffer_size = preload_hyperparams.batch_size.max(1024); let mut loader = InternalDQNTrainer::new_with_device(preload_hyperparams, self.device.clone()) .map_err(|e| MLError::TrainingError(format!("Failed to create data loader: {e}")))?;