Files
foxhunt/tft_training_log.txt
jgrusewski 86afdb714d feat(wave-d): Complete Phase 6 agents G15-G19 - memory optimization + performance validation
- G15: Ring buffer memory optimization (2.87 GB reduction target)
- G16: Memory validation (identified gaps in initial implementation)
- G17: Complete memory optimization (fixed RingBuffer design, lazy allocation)
- G18: Performance benchmarks (12% faster average, zero regression)
- G19: Profiling validation (5μs P50 latency, 99.6% fewer allocations)

Production readiness: 92%
Test coverage: 34/36 tests passing (94.4%)
Memory savings: 66% reduction (2.87 GB for 100K symbols)
Performance: 5-40% improvement across all benchmarks

Modified files:
- ml/src/features/normalization.rs (RingBuffer implementation)
- ml/src/features/pipeline.rs (lazy bars allocation)
- ml/src/features/volume_features.rs (lazy allocation)
- adaptive-strategy/src/ensemble/weight_optimizer.rs (regime Sharpe)
- ml/src/tft/mod.rs (225-feature support)
2025-10-18 18:14:34 +02:00

633 lines
26 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Blocking waiting for file lock on build directory
warning: multiple fields are never read
--> common/src/ml_strategy.rs:124:5
|
66 | pub struct MLFeatureExtractor {
| ------------------ fields in this struct
...
124 | volatility_history: Vec<f64>,
| ^^^^^^^^^^^^^^^^^^
125 | /// Rolling volume history for percentile calculation (separate from main volume buffer)
126 | volume_percentile_buffer: Vec<f64>,
| ^^^^^^^^^^^^^^^^^^^^^^^^
127 | /// Return history for autocorrelation calculation
128 | returns_history: Vec<f64>,
| ^^^^^^^^^^^^^^^
129 | /// Momentum ROC(5) history for acceleration calculation
130 | momentum_roc_5_history: Vec<f64>,
| ^^^^^^^^^^^^^^^^^^^^^^
131 | /// Momentum ROC(10) history for acceleration calculation
132 | momentum_roc_10_history: Vec<f64>,
| ^^^^^^^^^^^^^^^^^^^^^^^
133 | /// Acceleration history for jerk calculation
134 | acceleration_history: Vec<f64>,
| ^^^^^^^^^^^^^^^^^^^^
135 | /// Price highs for divergence detection (last 20 periods)
136 | price_highs: Vec<f64>,
| ^^^^^^^^^^^
137 | /// Momentum highs for divergence detection (last 20 periods)
138 | momentum_highs: Vec<f64>,
| ^^^^^^^^^^^^^^
139 | /// Historical momentum values for regime classification (last 100 periods)
140 | momentum_regime_history: Vec<f64>,
| ^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `MLFeatureExtractor` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
= note: `#[warn(dead_code)]` on by default
warning: `common` (lib) generated 1 warning
warning: unused import: `DBNTickAdapter`
--> ml/src/data_loaders/dbn_sequence_loader.rs:45:45
|
45 | use crate::data_loaders::dbn_tick_adapter::{DBNTickAdapter, Tick};
| ^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: unused import: `Context`
--> ml/src/features/normalization.rs:31:14
|
31 | use anyhow::{Context, Result};
| ^^^^^^^
warning: unnecessary parentheses around assigned value
--> ml/src/features/normalization.rs:351:24
|
351 | let variance = (self.m2.max(0.0) / (self.count - 1) as f64);
| ^ ^
|
= note: `#[warn(unused_parens)]` on by default
help: remove these parentheses
|
351 - let variance = (self.m2.max(0.0) / (self.count - 1) as f64);
351 + let variance = self.m2.max(0.0) / (self.count - 1) as f64;
|
warning: unused import: `Context`
--> ml/src/features/volume_features.rs:30:14
|
30 | use anyhow::{Context, Result};
| ^^^^^^^
warning: unused import: `Context`
--> ml/src/regime/pages_test.rs:29:14
|
29 | use anyhow::{Context, Result};
| ^^^^^^^
|
help: if this is a test module, consider adding a `#[cfg(test)]` to the containing module
--> ml/src/regime/mod.rs:13:1
|
13 | pub mod pages_test;
| ^^^^^^^^^^^^^^^^^^^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/labeling/meta_labeling/primary_model.rs:114:1
|
114 | / pub struct PrimaryDirectionalModel {
115 | | config: PrimaryModelConfig,
... |
118 | | }
| |_^
|
note: the lint level is defined here
--> ml/src/lib.rs:40:9
|
40 | #![warn(missing_debug_implementations)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/adx_features.rs:63:1
|
63 | / pub struct AdxFeatureExtractor {
64 | | /// Period for Wilder's smoothing (default: 14)
65 | | period: usize,
66 | | /// Bar counter (tracks initialization phase)
... |
89 | | dx_history: VecDeque<f64>,
90 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/barrier_optimization.rs:85:1
|
85 | / pub struct BarrierOptimizer {
86 | | profit_range: Vec<f64>,
87 | | stop_range: Vec<f64>,
88 | | horizon_range: Vec<usize>,
89 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/feature_extraction.rs:23:1
|
23 | / pub struct FeatureExtractor {
24 | | /// RSI period (default 14)
25 | | rsi_period: usize,
26 | | /// EMA fast period (default 12)
... |
35 | | atr_period: usize,
36 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/normalization.rs:37:1
|
37 | / pub struct FeatureNormalizer {
38 | | /// Price feature normalizers (indices 15-74, 60 features)
39 | | price_normalizers: Vec<RollingZScore>,
... |
60 | | nan_handler: NaNHandler,
61 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/normalization.rs:286:1
|
286 | / pub struct RollingZScore {
287 | | window_size: usize,
288 | | values: VecDeque<f64>,
289 | | mean: f64,
290 | | m2: f64, // Sum of squared deviations (for std)
291 | | count: usize,
292 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/normalization.rs:372:1
|
372 | / pub struct RollingPercentileRank {
373 | | window_size: usize,
374 | | values: VecDeque<f64>,
375 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/normalization.rs:426:1
|
426 | / pub struct LogZScoreNormalizer {
427 | | scale_factor: f64,
428 | | zscore: RollingZScore,
429 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/pipeline.rs:98:1
|
98 | / pub struct FeatureExtractionPipeline {
99 | | /// Configuration
100 | | config: FeatureConfig,
... |
124 | | total_extractions: u64,
125 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/price_features.rs:33:1
|
33 | pub struct PriceFeatureExtractor;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/regime_adx.rs:48:1
|
48 | / pub struct RegimeADXFeatures {
49 | | /// Smoothing period (default: 14)
50 | | period: usize,
51 | | /// Wilder's smoothing constant (1/period)
... |
75 | | bar_count: usize,
76 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/regime_cusum.rs:21:1
|
21 | / pub struct RegimeCUSUMFeatures {
22 | | detector: CUSUMDetector,
23 | | breaks_window: VecDeque<StructuralBreak>,
24 | | window_size: usize,
... |
27 | | last_break_result: Option<StructuralBreak>,
28 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/regime_transition.rs:40:1
|
40 | / pub struct RegimeTransitionFeatures {
41 | | /// Underlying transition matrix tracking regime changes
42 | | matrix: RegimeTransitionMatrix,
... |
45 | | current_regime: MarketRegime,
46 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/statistical_features.rs:39:1
|
39 | / pub struct StatisticalFeatureExtractor {
40 | | /// Ring buffer for rolling mean (O(1) updates)
41 | | ring_buffer: VecDeque<f64>,
42 | | /// Welford's online algorithm state for variance
... |
49 | | window_size: usize,
50 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/features/volume_features.rs:45:1
|
45 | / pub struct VolumeFeatureExtractor {
46 | | /// Rolling window of bars (reuses extraction.rs pattern)
47 | | bars: VecDeque<OHLCVBar>,
48 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/regime/pages_test.rs:56:1
|
56 | / pub struct PAGESTest {
57 | | /// Target variance (σ²₀) - baseline to compare against
58 | | target_variance: f64,
... |
82 | | update_count: usize,
83 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/regime/trending.rs:71:1
|
71 | / pub struct TrendingClassifier {
72 | | /// ADX threshold for trend detection (default 25.0)
73 | | adx_threshold: f64,
74 | | /// Hurst threshold for persistence (default 0.55)
... |
96 | | alpha_wilder: f64,
97 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/regime/ranging.rs:39:1
|
39 | / pub struct RangingClassifier {
40 | | /// Bollinger Bands period (default 20)
41 | | bollinger_period: usize,
42 | | /// Bollinger Bands standard deviation multiplier (default 2.0)
... |
56 | | bb_cache: Option<(f64, f64, f64)>, // (upper, middle, lower)
57 | | }
| |_^
warning: type does not implement `std::fmt::Debug`; consider adding `#[derive(Debug)]` or a manual implementation
--> ml/src/regime/volatile.rs:64:1
|
64 | / pub struct VolatileClassifier {
65 | | /// Parkinson threshold multiplier (default 1.5σ)
66 | | parkinson_threshold_multiplier: f64,
67 | | /// Garman-Klass volatility threshold
... |
76 | | atr_cache: VecDeque<f64>,
77 | | }
| |_^
warning: `ml` (lib) generated 24 warnings (run `cargo fix --lib -p ml` to apply 5 suggestions)
Compiling ml v1.0.0 (/home/jgrusewski/Work/foxhunt/ml)
warning: extern crate `approx` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use approx as _;` to the crate root
= note: requested on the command line with `-W unused-crate-dependencies`
warning: extern crate `arrow` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use arrow as _;` to the crate root
warning: extern crate `async_trait` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use async_trait as _;` to the crate root
warning: extern crate `bincode` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use bincode as _;` to the crate root
warning: extern crate `bytes` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use bytes as _;` to the crate root
warning: extern crate `candle_core` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use candle_core as _;` to the crate root
warning: extern crate `candle_nn` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use candle_nn as _;` to the crate root
warning: extern crate `candle_optimisers` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use candle_optimisers as _;` to the crate root
warning: extern crate `chrono_tz` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use chrono_tz as _;` to the crate root
warning: extern crate `clap` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use clap as _;` to the crate root
warning: extern crate `common` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use common as _;` to the crate root
warning: extern crate `config` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use config as _;` to the crate root
warning: extern crate `criterion` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use criterion as _;` to the crate root
warning: extern crate `crossbeam` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use crossbeam as _;` to the crate root
warning: extern crate `dashmap` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use dashmap as _;` to the crate root
warning: extern crate `data` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use data as _;` to the crate root
warning: extern crate `databento` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use databento as _;` to the crate root
warning: extern crate `dotenv` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use dotenv as _;` to the crate root
warning: extern crate `fastrand` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use fastrand as _;` to the crate root
warning: extern crate `flate2` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use flate2 as _;` to the crate root
warning: extern crate `fs2` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use fs2 as _;` to the crate root
warning: extern crate `futures` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use futures as _;` to the crate root
warning: extern crate `futures_test` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use futures_test as _;` to the crate root
warning: extern crate `half` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use half as _;` to the crate root
warning: extern crate `hex` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use hex as _;` to the crate root
warning: extern crate `hmac` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use hmac as _;` to the crate root
warning: extern crate `insta` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use insta as _;` to the crate root
warning: extern crate `lazy_static` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use lazy_static as _;` to the crate root
warning: extern crate `libc` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use libc as _;` to the crate root
warning: extern crate `lru` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use lru as _;` to the crate root
warning: extern crate `memmap2` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use memmap2 as _;` to the crate root
warning: extern crate `mockall` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use mockall as _;` to the crate root
warning: extern crate `nalgebra` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use nalgebra as _;` to the crate root
warning: extern crate `num` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use num as _;` to the crate root
warning: extern crate `num_cpus` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use num_cpus as _;` to the crate root
warning: extern crate `num_traits` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use num_traits as _;` to the crate root
warning: extern crate `once_cell` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use once_cell as _;` to the crate root
warning: extern crate `parking_lot` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use parking_lot as _;` to the crate root
warning: extern crate `parquet` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use parquet as _;` to the crate root
warning: extern crate `petgraph` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use petgraph as _;` to the crate root
warning: extern crate `prometheus` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use prometheus as _;` to the crate root
warning: extern crate `proptest` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use proptest as _;` to the crate root
warning: extern crate `rand` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use rand as _;` to the crate root
warning: extern crate `rand_distr` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use rand_distr as _;` to the crate root
warning: extern crate `rayon` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use rayon as _;` to the crate root
warning: extern crate `reqwest` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use reqwest as _;` to the crate root
warning: extern crate `risk` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use risk as _;` to the crate root
warning: extern crate `rstest` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use rstest as _;` to the crate root
warning: extern crate `rust_decimal` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use rust_decimal as _;` to the crate root
warning: extern crate `semver` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use semver as _;` to the crate root
warning: extern crate `serde` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use serde as _;` to the crate root
warning: extern crate `serde_json` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use serde_json as _;` to the crate root
warning: extern crate `serial_test` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use serial_test as _;` to the crate root
warning: extern crate `sha2` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use sha2 as _;` to the crate root
warning: extern crate `sqlx` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use sqlx as _;` to the crate root
warning: extern crate `statrs` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use statrs as _;` to the crate root
warning: extern crate `storage` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use storage as _;` to the crate root
warning: extern crate `sysinfo` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use sysinfo as _;` to the crate root
warning: extern crate `tempfile` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use tempfile as _;` to the crate root
warning: extern crate `test_case` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use test_case as _;` to the crate root
warning: extern crate `thiserror` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use thiserror as _;` to the crate root
warning: extern crate `tokio_test` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use tokio_test as _;` to the crate root
warning: extern crate `trading_engine` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use trading_engine as _;` to the crate root
warning: extern crate `uuid` is unused in crate `train_tft_dbn`
|
= help: remove the dependency or add `use uuid as _;` to the crate root
warning: unused variable: `training_duration`
--> ml/examples/train_tft_dbn.rs:281:9
|
281 | let training_duration = start_time.elapsed();
| ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_training_duration`
|
= note: `#[warn(unused_variables)]` on by default
warning: `ml` (example "train_tft_dbn") generated 65 warnings
Finished `release` profile [optimized] target(s) in 3m 55s
Running `target/release/examples/train_tft_dbn`
2025-10-18T11:52:59.329513Z  INFO train_tft_dbn: 🚀 Starting TFT Training with Real DataBento Data
2025-10-18T11:52:59.329582Z  INFO train_tft_dbn: Configuration:
2025-10-18T11:52:59.329584Z  INFO train_tft_dbn: • Data path: test_data/real/databento/ES.FUT_ohlcv-1m_2024-01-02.dbn
2025-10-18T11:52:59.329585Z  INFO train_tft_dbn: • Epochs: 20
2025-10-18T11:52:59.329588Z  INFO train_tft_dbn: • Learning rate: 0.001
2025-10-18T11:52:59.329596Z  INFO train_tft_dbn: • Batch size: 32
2025-10-18T11:52:59.329597Z  INFO train_tft_dbn: • Hidden dimension: 256
2025-10-18T11:52:59.329603Z  INFO train_tft_dbn: • Attention heads: 8
2025-10-18T11:52:59.329605Z  INFO train_tft_dbn: • Lookback window: 60
2025-10-18T11:52:59.329606Z  INFO train_tft_dbn: • Forecast horizon: 10
2025-10-18T11:52:59.329607Z  INFO train_tft_dbn: • Train/val split: 80.0%/20.0%
2025-10-18T11:52:59.329616Z  INFO train_tft_dbn: • GPU: CUDA MANDATORY (no CPU fallback)
2025-10-18T11:52:59.329618Z  INFO train_tft_dbn: • Early stopping patience: 20 epochs
2025-10-18T11:52:59.329619Z  INFO train_tft_dbn: • Early stopping threshold: 1.00e-4
2025-10-18T11:52:59.329637Z  INFO train_tft_dbn: • Output directory: ml/trained_models
2025-10-18T11:52:59.329639Z  INFO train_tft_dbn: • Bar sampling method: time
2025-10-18T11:52:59.329648Z  INFO train_tft_dbn: ✅ Bar sampling configured: TimeBars
2025-10-18T11:52:59.329650Z  INFO train_tft_dbn:
📊 Loading real market data from DataBento...
2025-10-18T11:52:59.336263Z  WARN train_tft_dbn: Skipping corrupted bar at index 1505 (timestamp: 2024-01-02 20:50:00 UTC)
2025-10-18T11:52:59.336275Z  WARN train_tft_dbn: Skipping corrupted bar at index 1505 (timestamp: 2024-01-02 20:50:00 UTC)
2025-10-18T11:52:59.336277Z  WARN train_tft_dbn: Skipping corrupted bar at index 1506 (timestamp: 2024-01-02 20:50:00 UTC)
2025-10-18T11:52:59.336278Z  WARN train_tft_dbn: Skipping corrupted bar at index 1506 (timestamp: 2024-01-02 20:50:00 UTC)
2025-10-18T11:52:59.336281Z  WARN train_tft_dbn: Skipping corrupted bar at index 1526 (timestamp: 2024-01-02 20:57:00 UTC)
2025-10-18T11:52:59.336289Z  INFO train_tft_dbn: Applied 101 automatic price corrections for encoding inconsistencies
2025-10-18T11:52:59.336301Z  INFO train_tft_dbn: ✅ Loaded 1674 OHLCV bars from DataBento
2025-10-18T11:52:59.336302Z  INFO train_tft_dbn:
🔄 Converting to TFT data format...
2025-10-18T11:52:59.385401Z  INFO train_tft_dbn: ✅ Created 1605 TFT samples
2025-10-18T11:52:59.401999Z  INFO train_tft_dbn: ✅ Split: 1284 training, 321 validation samples
2025-10-18T11:52:59.415600Z  INFO ml::trainers::tft: Initializing TFT trainer with config: TFTTrainerConfig { epochs: 20, learning_rate: 0.001, batch_size: 32, hidden_dim: 256, num_attention_heads: 8, dropout_rate: 0.1, lstm_layers: 2, quantiles: [0.1, 0.5, 0.9], lookback_window: 60, forecast_horizon: 10, use_gpu: true, checkpoint_dir: "ml/trained_models" }
2025-10-18T11:52:59.532329Z  INFO ml::trainers::tft: Using device: Cuda(CudaDevice(DeviceId(1)))
2025-10-18T11:52:59.560171Z  INFO train_tft_dbn: ✅ TFT trainer initialized
2025-10-18T11:52:59.560192Z  INFO train_tft_dbn:
🏋️ Starting training...
2025-10-18T11:52:59.560233Z  INFO train: ml::trainers::tft: Starting TFT training for 20 epochs
2025-10-18T11:52:59.560248Z  INFO train: ml::trainers::tft: Initialized AdamW optimizer with lr=1.00e-3
Error: Training failed
Caused by:
Training error: Optimizer backward_step failed: DriverError(CUDA_ERROR_OUT_OF_MEMORY, "out of memory")
0: <candle_core::cuda_backend::device::CudaDevice as candle_core::backend::BackendDevice>::zeros_impl
1: candle_core::tensor::Tensor::zeros_like
2: candle_core::backprop::GradStore::or_insert
3: candle_core::backprop::<impl candle_core::tensor::Tensor>::backward
4: ml::trainers::tft::TFTTrainer::train::{{closure}}::{{closure}}
5: train_tft_dbn::main::{{closure}}
6: train_tft_dbn::main
7: std::sys::backtrace::__rust_begin_short_backtrace
8: main
9: __libc_start_call_main
at ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
10: __libc_start_main_impl
at ./csu/../csu/libc-start.c:360:3
11: _start
Stack backtrace:
0: <E as anyhow::context::ext::StdError>::ext_context
1: train_tft_dbn::main::{{closure}}
2: train_tft_dbn::main
3: std::sys::backtrace::__rust_begin_short_backtrace
4: main
5: __libc_start_call_main
at ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
6: __libc_start_main_impl
at ./csu/../csu/libc-start.c:360:3
7: _start