v0.6.0
Robustness, correctness, and R/Python API-parity release. Closes the full review-and-fix sweep (issues #2–#16).
Correctness & robustness
- Rank-pool pooling now uses a fused
embedding_bag(mode=sum), cutting peak training VRAM ~5.4 GB → ~0.7 GB at batch 16384 / max_species 256 — fixes the WDDM-spill driver watchdog TDR on species-rich targets (#6). - CPU/CUDA hash parity: CPU
hash_speciesaligned with the CUDA kernel's double-hash finalizer, so GPU-trained checkpoints score correctly on CPU (#7). - Deterministic taxonomy vocab: genus/family IDs assigned in sorted order, removing CSV-row-order dependence that misaligned embeddings across rebuilds (#5).
- Deterministic
MultiTaskLossaccumulator (scalar seed, device from ordered targets) (#16). - Locale-free numeric parsing (
parse_float_strict): rejects trailing garbage, comma-decimal-locale safe (#16). - CSV header hygiene: strips UTF-8 BOM, throws on duplicate column names (#16).
- Reproducible per-epoch shuffle, exception-safe AMP scope, CSR offset validation, padding mask fix (#9, #10, #11, #15).
- None-unpack UB guard + GIL release in the nanobind model/predict paths (#16).
Inference & training surface
- Chunked
predictbounds peak VRAM regardless of plot count; CPU-default inference (#2). - Platform-aware CUDA allocator + auto-halve
batch_sizeon OOM down to a floor (#3). - First-class checkpoint evaluation:
load_state, classification predictions, test/train fold accessors (#4). - Checkpoint config/metadata loaders close the write-only asymmetry (#14).
R / Python API parity
- Thread
categorical_idsthrough the R model methods (#12). - Int64 ID accessors;
pool_species_cap;categorical_vocab()on Dataset/Trainer/Predictor;from_csv_with_schemaviaresolve.dataset.csv(..., schemaSource=)(#16).
Packaging
- Repositioned as domain-general (compositional data, not ecology-only).
- Version synced to 0.6.0 across the Python, R, and C++ manifests.