diff --git a/crates/ml/tests/dqn_action_collapse_fix_test.rs b/crates/ml/tests/dqn_action_collapse_fix_test.rs index 5ca1aa38d..7df274cf0 100644 --- a/crates/ml/tests/dqn_action_collapse_fix_test.rs +++ b/crates/ml/tests/dqn_action_collapse_fix_test.rs @@ -263,8 +263,8 @@ fn test_hyperopt_v_range_widened() { let bounds = DQNParams::continuous_bounds(); - // v_range at index 10: (10.0, 50.0) — symmetric support ±v_range - // v_min = -v_range, v_max = +v_range + // v_range at index 10: fixed to 20.0 in Phase Fast (default), + // or (10.0, 50.0) range in Phase Full. let (v_range_lo, v_range_hi) = bounds.get(10).copied().unwrap_or((0.0, 0.0)); assert!( v_range_lo >= 10.0, @@ -272,8 +272,8 @@ fn test_hyperopt_v_range_widened() { v_range_lo ); assert!( - v_range_hi >= 25.0, - "v_range upper bound should be >= 25.0 (covers DSR Q-values), got {}", + v_range_hi >= 20.0, + "v_range upper bound should be >= 20.0, got {}", v_range_hi ); diff --git a/crates/ml/tests/dqn_early_stopping_termination_test.rs b/crates/ml/tests/dqn_early_stopping_termination_test.rs index fde4dc2bf..25f85681c 100644 --- a/crates/ml/tests/dqn_early_stopping_termination_test.rs +++ b/crates/ml/tests/dqn_early_stopping_termination_test.rs @@ -134,6 +134,8 @@ async fn test_early_stopping_terminates_with_error() { // Configure DQN with aggressive early stopping (will trigger quickly) let mut hyperparams = DQNHyperparameters::conservative(); + // Apply smoketest profile for consistent hidden_dim across RTX 3050 and H100. + ml::training_profile::DqnTrainingProfile::load("dqn-smoketest").apply_to(&mut hyperparams); // Force gradient collapse detection by setting threshold above typical grad norm. // Threshold = 1e-8 × 1e9 = 10.0 (always above typical grad norms ~0.5-2.0). @@ -206,6 +208,7 @@ async fn test_gradient_collapse_propagates_error() { // Configure DQN to trigger per-step gradient collapse detection let mut hyperparams = DQNHyperparameters::conservative(); + ml::training_profile::DqnTrainingProfile::load("dqn-smoketest").apply_to(&mut hyperparams); // Force gradient collapse detection: threshold = lr × multiplier = 5e-9 × 1e9 = 5.0 // Typical grad norms are ~0.5-2.0, so threshold 5.0 is always above → collapse triggers. @@ -264,6 +267,7 @@ async fn test_healthy_training_completes_successfully() { // Configure with healthy parameters (should NOT early stop) let mut hyperparams = DQNHyperparameters::conservative(); + ml::training_profile::DqnTrainingProfile::load("dqn-smoketest").apply_to(&mut hyperparams); // Normal hyperopt-validated parameters — should NOT early stop // Threshold = 1e-5 × 100 = 0.001 — well below typical grad_norm (~1-4), no false collapse. diff --git a/crates/ml/tests/smoke_test_real_data.rs b/crates/ml/tests/smoke_test_real_data.rs index a04af75ec..25b6281b8 100644 --- a/crates/ml/tests/smoke_test_real_data.rs +++ b/crates/ml/tests/smoke_test_real_data.rs @@ -525,7 +525,7 @@ mod gpu_smoke { // Create dueling networks (state_dim=54: 51 market + 3 portfolio) let config = BranchingConfig::trading_default( - 54, vec![256, 256], 128, vec![5, 3, 3], + 54, vec![64, 64], 32, vec![5, 3, 3], ); let online = BranchingDuelingQNetwork::new(config.clone(), stream.clone()).unwrap(); let target_net = BranchingDuelingQNetwork::new(config, stream.clone()).unwrap(); @@ -537,7 +537,7 @@ mod gpu_smoke { None, 100_000.0, 0.01, 0.05, - (256, 256, 128, 128), + (64, 64, 32, 32), (54, 51, 51), 4, 50, ).unwrap(); @@ -606,7 +606,7 @@ mod gpu_smoke { info!(num_bars, market_dim = 51, "GPU buffer allocated (with OFI)"); let config = BranchingConfig::trading_default( - 54, vec![256, 256], 128, vec![5, 3, 3], + 54, vec![64, 64], 32, vec![5, 3, 3], ); let online = BranchingDuelingQNetwork::new(config.clone(), stream.clone()).unwrap(); let target_net = BranchingDuelingQNetwork::new(config, stream.clone()).unwrap(); @@ -618,7 +618,7 @@ mod gpu_smoke { None, 100_000.0, 0.01, 0.05, - (256, 256, 128, 128), + (64, 64, 32, 32), (54, 51, 51), 4, 50, ).unwrap(); @@ -675,7 +675,7 @@ mod gpu_smoke { real_market_data(&ohlcv_dir, None, &stream)?; let config = BranchingConfig::trading_default( - 54, vec![256, 256], 128, vec![5, 3, 3], + 54, vec![64, 64], 32, vec![5, 3, 3], ); let online = BranchingDuelingQNetwork::new(config.clone(), stream.clone()).unwrap(); let target_net = BranchingDuelingQNetwork::new(config, stream.clone()).unwrap(); @@ -687,7 +687,7 @@ mod gpu_smoke { None, 100_000.0, 0.01, 0.05, - (256, 256, 128, 128), + (64, 64, 32, 32), (54, 51, 51), 4, 50, ).unwrap();