What's Changed
- fix(cubecl): restrict GEMV CPU autotune priority to 1D vector workloads (#5423) @Sadik00789
- fix(store): abort instead of double-dropping when a mapper unwinds (#5488) @antimora
- Chore/bump cubecl cubek revs (#5497) @nathanielsimard
- fix(deps): restore windows dependency compatibility in lockfile (#5499) @laggui
- fix(optim): keep tensor data in optimizer records (#5407) @original4422
- docs(pack): clarify tensor thread-safety contract (#5500) @laggui
- chore(deps): update cubecl + cubek to fix fma sigsev (#5501) @ThierryCantin-Demers
- fix(store): preserve extensionless burnpack paths (#5494) @rioyu123
- feat(optim): add LAMB optimizer (#5495) @Mikyx-1
- fix(store): respect PyTorch tensor strides (#5392) @original4422
- refactor(tensor): move padding operations to backend (#5505) @laggui
- feat(tensor): support mul indexing updates on NdArray and Flex (#5325) @mattisonchao
- feat(module): generalize
Paramwith module-owned flags (#5498) @laggui - refactor(cubecl): interpolate autotuning with cubek strategies and roofline bounds (#5502) @SamuelBelanger
- fix(router): support rfft and irfft (#5513) @Mikyx-1
- fix(module): keep the param mapper across valid() and from_inner (#5509) @nathanielsimard
- feat(tch): support mul indexing updates (#5511) @mattisonchao
- Update/cube (#5518) @louisfd
- feat(cubecl): support mul indexing updates (#5512) @mattisonchao
- test(quantization): strengthen quantized layout coverage (#5503) @Mikyx-1
- test(cubecl): rename indexing tests to reflect reference matching (#5519) @laggui
- fix(train): aggregate Dice statistics across batches (#5515) @Mikyx-1
- fix(train): return final ROUGE-L value (#5517) @Mikyx-1
- Refactor/cubecl runtimes (#5528) @nathanielsimard
- refactor(backend): remove specialized indexing add operations (#5523) @laggui
- fix(store): exclude adapter-matched tensors from unused (#5536) @apoorvdarshan
- chore: deprecate burn-tch backend (#5525) @antimora
- feat(autodiff): implement topk backward (#5531) @Mikyx-1
- fix(store): return deserialization error instead of panicking in nested Deserializer (#5496) @Sadik00789
- fix(autodiff): zero-safe prod gradients (#5534) @Mikyx-1
- feat(tensor): support assign indexing updates across backends (#5532) @mattisonchao
- perf(cubecl): offer
Gemmon CPU for general matmuls (#5538) @ThierryCantin-Demers - fix(fusion): a panicking operation must not poison its stream (#5535) @nathanielsimard
- fix(pack): validate size from aligned data offset (#5530) @Mikyx-1
- chore(deps): follow cubecl's collapsed memory throughput modes (#5510) @ThierryCantin-Demers
- fix(no-std): use shared sync primitives across crates (#5543) @laggui
- fix(store): write safetensors files atomically (#5489) @antimora
- refactor(dispatch): unify routing and strengthen autodiff contract (#5520) @laggui
- chore(deps): reduce unnecessary dependencies (#5544) @nathanielsimard
- fix(autodiff): prod backward broadcasting (#5547) @laggui
- feat(tensor): add batched SVD decomposition to linalg (#5259) @sehaxe
- fix(store): reject a loaded tensor whose dtype is the wrong kind (#5490) @antimora
- fix(dispatch): restore autodiff context promotion (#5551) @laggui
- Refactor/fusion write scope (#5540) @nathanielsimard
- fix(ndarray): preserve SIMD unary layout and recip precision (#5553) @laggui
- feat(module): separate gradient control from module freezing (#5537) @laggui
- feat(backend)!: support asymmetric padding in conv1d and conv2d (#5521) @laggui
- fix(tensor): validate matmul batch broadcast in TensorCheck (#5555) @ax1s-x1zz
- feat(tensor): replace
no_gradwith explicit autodiff conversions (#5557) @laggui - docs(tensor): fix unfold window formula (#5559) @Mikyx-1
- perf(conv): accumulate direct convolution channels in vector registers on CPU (#5545) @ThierryCantin-Demers
- chore(deps): update cubecl and cubek for fallible throughput probes (#5561) @ThierryCantin-Demers
- Chore/update cubecl runtime erasure (#5556) @nathanielsimard
- fix(store): reject invalid path filter regex (#5558) @Mikyx-1
- feat(tensor)!: add multi-axis vector norm variants and update empty
max_abs_dimssemantics (#5539) @Sadik00789 - feat(tensor): add assert_shape! and debug_assert_shape! macros (#5554) @antimora
- feat(tensor): apply TensorCheck to remainder, powi, powf, hypot, atan2 (#5564) @ax1s-x1zz
- fix(dispatch): decouple CubeCL runtime facade crates (#5570) @laggui
- fix(nn): exclude pad tokens from cross-entropy normalization (#5569) @Mikyx-1
- feat(tensor): add
is_autodiffandis_trackedstate inspection (#5571) @laggui - chore: update cubecl and cubek revs (#5586) @nathanielsimard
- feat(tensor): validate matmul rank in TensorCheck (#5580) @ax1s-x1zz
- feat(cubecl): support AdaptiveAvgPool3d (#5372) @jcwal1516
- fix(rl): preserve deterministic mode in async batches (#5574) @Ultronen
- fix(pack): validate tensor byte lengths when reading (#5576) @Mikyx-1
- feat(linalg)!: extract tensor linalg into
burn-linalgextension crate (#5572) @laggui - fix(train): exclude padded samples from accuracy aggregation (#5578) @Mikyx-1
- fix(optim): keep a parameter's checkpointing strategy across an update (#5618) @Marc-AnthonyG
- perf(fusion): let a padded tensor vote for the block's layout (#5620) @Marc-AnthonyG
- perf(fusion): settle only the unfusable head of a block (#5622) @Marc-AnthonyG
- feat(cubecl): implement integer powi operations (#5616) @laggui
- test(backend): cover empty-axis autodiff reductions (#5598) @lorenzozanee
- docs(flex): fix stale statements in burn-flex docs and comments (#5619) @7487
- perf(flex): write slice_assign in place when the destination is uniquely owned (#5603) @hdimer
- Feat/storage tiled carrier (#5631) @louisfd
- test(fusion): change f32 expected value to oracle (#5633) @laggui
- perf(cubecl): scatter-add runs one unit per value with atomic adds (#5621) @Marc-AnthonyG
- fix(nn): honor count_include_pad for asymmetric average pooling (#5592) @DivyamTalwar
- perf(autodiff): reduce a broadcast gradient over all dims at once (#5623) @Marc-AnthonyG
- fix(cubecl): gate storage_tiled tests behind runtime features (#5635) @laggui
- fix(tensor): avoid cosine similarity denominator underflow (#5585) @Mikyx-1
- perf(flex): optimize views, copies, in-place ops, and Rayon parallelism (#5613) (#5617) @Sadik00789
- refactor(dataset): back SqliteDataset with Turso instead of rusqlite (#5546) @antimora
- perf(cubecl): walk elementwise kernels in operands' memory order (#5625) @Marc-AnthonyG
- feat(autodiff): support graph-preserving cross-backend transfers (#5624) @laggui
- fix(flex): avoid overflow in boolean select updates (#5629) @Ultronen
- test(burn-std): import vec! macro in layout.rs tests for no-std (#5639) @ax1s-x1zz
- fix(flex): support unsigned dtypes in int_argmax/int_argmin (#5630) @Punisheroot
- fix(store): harden and restructure the PyTorch reader (#5593) @antimora
- fix(flex): guard sum fast path with layout_covers_storage_once (#5634) @antimora
- test(backend): cover empty-axis autodiff product reductions (#5641) @lorenzozanee
- fix(linalg): add autotune feature propagation (#5648) @laggui
- fix(autodiff)!: retain input nodes until child registration (#5647) @laggui
- refactor(cubecl): call cubek's direct convolution routine (#5646) @ThierryCantin-Demers
- fix(autodiff): explicitly reject consumed graph reuse and preserve reusable leaves (#5645) @laggui
- fix(cubecl): update cubek to fix sums over overlapping views (#5654) @laggui
- feat(tensor): implement Min and Max scatter/select_assign across backends (#5582) @ax1s-x1zz
- fix(flex): validate gather_nd and scatter_nd coordinates (#5640) @stack3mpty
- ci: reduce redundant compilation in macOS tests (#5669) @laggui
- fix(flex): round nearest grid_sample ties to even (#5663) @yuefdev
- fix(burn-dataset): cap MNIST item counts at the split size (#5667) @li-jin-quan
- fix(flex): make u64 right shift logical (#5661) @yuefdev
- fix(deps): update rustls for cargo audit (#5672) @laggui
- Update/cubecl crate layout (#5670) @nathanielsimard
- test(pack): check streaming memory with a drop hook, not a global allocator (#5666) @yuefdev
- ci: reduce redundant compilation across test suites (#5671) @laggui
- chore(deps)!: make backend tracing opt-in (#5675) @laggui
- fix(flex): honor asymmetric padding in conv3d (#5650) @onenewcode
- perf(flex): parallelize attention across (batch, head) pairs (#5612) (#5636) @Sadik00789
- fix(burn-ndarray): sign(NaN) must be 0, not its hidden sign bit (#5665) @SRaswan
- fix(flex): handle remainder edge cases (#5652) @onenewcode
- fix(flex): propagate NaN through max pooling (#5662) @yuefdev
- chore(deps): reduce dataframe dataset dependencies with polars-core (#5680) @laggui
- ci: reduce examples overhead by skipping coverage setup and enabling caching (#5681) @laggui
- fix(train): handle tied scores in average precision (#5684) @Mikyx-1
- fix(store): collect PyTorch tensors nested in lists/tuples with indexed names (#5664) @SIDDARTHAREDDY8
- perf(autodiff): avoid redundant traversal in checkpoint topological sort (#5679) @haydenflinner
- fix(cubecl): same-runtime device moves without a peer transport, and quantized moves (#5678) @ThierryCantin-Demers
- fix(flex): propagate NaN through relu and clamp_min/clamp_max (#5658) @Liberxue
- fix(deps): avoid enabling CubeCL through linalg defaults and respect vision defaults (#5694) @laggui
- fix(linalg): support negative even lp norm orders (#5693) @Mikyx-1
- perf(nn): use a dedicated BatchNorm training op with closed-form backward (#5676) @Marc-AnthonyG @laggui
- feat(tensor): add einsum with runtime and macro APIs (#5583) @Mikyx-1
- feat(extension): generate Fusion implementations for backend extensions (#5673) @laggui
- chore: update cubek (#5701) @louisfd
- refactor(store): extract the PyTorch reader into a burn-free pytorch-reader crate (#5656) @antimora
- fix(cubecl): update dependencies to fix empty tensor readback (#5704) @laggui
- fix(autodiff): preserve gradients for zero scalar exponents (#5692) @SRaswan
- chore: update cubek (#5703) @Charles23R
- chore(deps): trim zip default features and fix burn-dataset nlp feature (#5715) @antimora
- feat(signal)!: extract tensor signal into
burn-signalextension crate (#5720) @laggui - fix(core): let an init_mapper parameter train on an autodiff device (#5705) @ThierryCantin-Demers
- refactor(module)!: merge
AutodiffModuleintoModule(#5721) @laggui - fix(cubecl): propagate NaN through two-sided clamp (#5718) @Liberxue
- fix(ci): publish burn-einsum and include it in no-std checks (#5727) @laggui
- fix(dispatch): require explicit backend selection and support backend-free builds (#5722) @laggui
- fix(remote): leave the process-wide log subscriber to the program (#5724) @ThierryCantin-Demers
- docs(book): update backend extension guides and include maintained example sources (#5731) @laggui
- fix(flex): handle NaN clamp bounds (#5717) @Liberxue
- fix(deps): restore the windows crate versions the cube update changed (#5735) @ThierryCantin-Demers
- fix(pytorch-reader): report values load_config cannot represent instead of defaulting (#5728) @antimora
- feat(tensor): device identity and one entry per physical GPU (#5688) @ThierryCantin-Demers
- Feat/profiling (#5726) @nathanielsimard
- perf(pytorch-reader): read stored ZIP entries outside the archive lock (#5714) @antimora
- chore: remove recursion limit workarounds and update CubeCL configs (#5736) @laggui
- fix(fusion): avoid autotuning empty reductions (#5725) @lorenzozanee
- fix(pytorch-reader): remove unsafe visitor cloning and deserialization panics (#5700) @Sadik00789
- fix(pytorch-reader): open a checkpoint once and never reopen it by path (#5737) @antimora
- fix(ndarray): preserve NaN through float clamps (#5733) @lorenzozanee
- docs(pytorch-reader): sync README with lib.rs (#5747) @superroket169
- fix(pytorch-reader): handle unsupported values in deserialize_any (#5764) @laggui
- fix(tensor): fix quiet softmax for negative infinity slices (#5743) @Mikyx-1
- fix(core): count a module's parameters without initializing them (#5746) @ThierryCantin-Demers
- fix(tensor): preserve f64 precision in degree/radian conversions (#5745) @Mikyx-1
- docs: fix typos and grammar in books and API comments (#5748) @hikmetba-bit
- docs: clarify guidelines for minor documentation fixes (#5765) @laggui
- Chore/cubecl device capacity (#5763) @nathanielsimard
- fix(burn-store): scope contiguous index mapping per prefix (#5750) @antimora
- fix(tensor): return NaN for infinite dividends in fmod_scalar (#5754) @Mikyx-1
- fix(train): flush partial gradient accumulation and step LR per optimizer update (#5729) @Mikyx-1
- docs: update guides and examples for Burn 0.22 (#5762) @laggui
- feat(core): a lazy parameter initializes on the device it moves to (#5739) @ThierryCantin-Demers
- fix(cubecl): handle broadcasting in mask_where and mask_fill (#5767) @laggui
- docs: cover remaining 0.22 migration points and refresh stale pages (#5768) @antimora
- Chore/cubecl environment records (#5771) @nathanielsimard
- docs: select the package when running examples from the repo root (#5773) @Liberxue
- fix(backends): correct average-pooling gradients with ceil mode (#5653) @slobodaapl
- chore: bump version to 0.22.0-pre.4 (#5776) @laggui