Files
foxhunt/crates/ml-ppo/Cargo.toml
jgrusewski 3738677d46 feat(bf16): PPO crate fully native BF16 — zero f32 on GPU
Convert entire ml-ppo crate from CudaSlice<f32> to CudaSlice<half::bf16>:
- CudaLinear: weights/bias/grads all bf16, sgemm→cublasGemmEx BF16
- CudaLSTM: 8 weight/grad buffers bf16, sgemm→GemmEx
- CudaVec: wraps CudaSlice<half::bf16>
- AdamW optimizer: all states bf16
- All 5 CUDA kernels (activation, linear, softmax, lstm, adam) native __nv_bfloat16
- PPO compute_losses: ENABLED (was #[cfg(any())] stub)
- PPO update_gpu: ENABLED (was bf16 migration pending stub)
- d2d_subrange_bf16 replaces d2d_subrange_f32
- Host boundary: f32↔bf16 conversion only at upload/download

Test results:
  ml-core:  300/300 (100%)
  ml-dqn:   359/359 (100%)
  ml-ppo:   167/168 (1 pre-existing action_masking logic bug)
  ml:       894/895 (1 pre-existing hyperopt bounds index)
  Total:   1720/1722 passing

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 12:56:36 +01:00

58 lines
1.4 KiB
TOML

[package]
name = "ml-ppo"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
documentation.workspace = true
publish.workspace = true
keywords.workspace = true
categories.workspace = true
description = "PPO reinforcement learning for Foxhunt trading"
[features]
default = ["cuda"]
cuda = ["ml-core/cuda", "cudarc"]
[dependencies]
ml-core.workspace = true
common.workspace = true
# CUDA (direct cudarc — candle eliminated)
cudarc = { version = "0.19", optional = true, default-features = false, features = ["driver", "cublas", "dynamic-linking", "std", "cuda-version-from-build-system", "f16"] }
# BF16 support
half.workspace = true
# Serialization
serde = { workspace = true, features = ["derive"] }
serde_json.workspace = true
# Core utilities
thiserror.workspace = true
anyhow.workspace = true
tracing.workspace = true
rand.workspace = true
rand_distr.workspace = true
rust_decimal.workspace = true
# CUDA helpers
fastrand = "2"
# Concurrency
parking_lot = { version = "0.12", features = ["hardware-lock-elision"] }
# Numerics
ndarray = { workspace = true, features = ["rayon"] }
statrs.workspace = true
[dev-dependencies]
tokio = { workspace = true, features = ["test-util", "macros"] }
approx.workspace = true
[lints]
workspace = true