What's Changed
- chore(deps): bump actions/checkout from 6 to 7 (#6280) @dependabot[bot]
- feat(core): stream batches through a split model with a thread per stage (#6277) @ThierryCantin-Demers
- Migration: Implement
LayerParallelism::from_layersto rebuild the model from itsLayerSequence.
- Migration: Implement
- refactor(interpolate)!: narrow resize options and consolidate alignment (#6288) @laggui
- Migration: Coordinate transforms and cubic coefficients move into
InterpolateModevariants. UseHalfPixelfor the previousalign_corners(false),AlignCornersfortrue, and update serialized configurations. Grid sampling usesGridSampleMode.
- Migration: Coordinate transforms and cubic coefficients move into
- ci: save Rust caches only from main and let main runs finish (#6233) @agarg21
- refactor(linalg): remove QR fusion workaround (#6304) @laggui
- perf(fusion): resolve a collective's members on every device at once (#6293) @ThierryCantin-Demers
- ci: run staging pin checks only on staging branch pushes (#6300) @laggui
- Bump cubecl to bbd78b5 and cubek to 17e417b (#6309) @ThierryCantin-Demers
- fix(nn): use effective kernels for dilated Same padding (#6286) @onenewcode
- perf(autodiff): run float collectives on the inner backend's collective (#6274) @ThierryCantin-Demers
- fix(dataset): return errors for invalid JSON rows (#6284) @onenewcode
- Remote backend: backend extensions, graph capture and device queries on a worker (#6308) @nathanielsimard
- fix(extension): clippy allow large enum variant (#6324) @laggui
- feat(dataset): add ImageFolderDataset::class_name (#6310) @Reacher3745
- feat!: matmul and attention on CubeK tile routines alone; native Metal (#6291) @louisfd
- Migration: The experimental
tile-kernels-onlyfeature and old matmul/flash-attention entry points are removed; usematmulandattention.
- Migration: The experimental
- perf(flex): use macerator 0.5.2 ops for exp, sigmoid, softmax and rounding (#6313) @antimora
- refactor(cubecl): tidy the tile attention and fused matmul glue (#6328) @louisfd
- fix(cubecl): use InputScalar for max_pool3d infinity to fix WGSL compilation (#6298) @vboussot
- Bump cubecl to fdba0a8 and cubek to 06e1c8e (#6332) @ThierryCantin-Demers
- Device::mode: compile-only and tune passes apply where the work runs (#6326) @nathanielsimard
- docs(readme): refresh Burn branding and badge layout (#6344) @laggui
- feat(remote)!: defer remote and router failures to the tensors they write (#6329) @nathanielsimard
- Migration:
RouterClient::flushreturns aResult.
- Migration:
- fix: gate burn-nn linalg layers; burn-remote client builds warning-free (#6327) @nathanielsimard
- Migration: Enable
linalgforCosineSimilarity,PairwiseDistance,CosineEmbeddingLoss,TripletMarginLossor orthogonal initialization.
- Migration: Enable
- feat(train)!: add optimizer-step metrics and grouped learning-rate reporting (#6256) @laggui
- Migration: Replace
metric_train_numeric(LearningRateMetric::new())withmetrics(LearningRateMetric::new()). Custom training strategies emitLearnerEvent::OptimizerStepafter each optimizer update.
- Migration: Replace
- docs(readme): remove redundant title and move badges above description (#6346) @laggui
- feat(group): generate a random tensor split where it is first needed (#6272) @ThierryCantin-Demers
- A remote mode closes after the client's queued work, not the server stream's (#6342) @nathanielsimard
- Device description and measurements: Backend methods in Burn's types, answered by a remote server (#6339) @nathanielsimard
- Migration: Replace
memory_pool_usage/memory_pool_reportwithmeasure_memory,memory_capacitywithdescription().max_memory,performance_statswithmeasure_peaks, andidentitywithcapabilities().properties.identity.
- Migration: Replace
- fix(cubecl): treat an empty tensor as non-overlapping (#6348) @ThierryCantin-Demers
- refactor(fusion): resolve a collective's members through SpawnedCall (#6349) @ThierryCantin-Demers
- perf(flex): vectorize f32 ln, tanh, erf, gelu and gelu_backward (#6341) @antimora
- docs: correct API descriptions and examples (#6361) @Mikyx-1
- test(backend): fix device description assertions for WGPU (#6366) @laggui
- fix(cubecl): preserve compile statistics across tuning passes (#6367) @laggui
- feat(attention)!: add sliding-window masking (#6259) @gzsombor
- Migration: Add
sliding_window: NonetoAttentionModuleOptionsliterals, or use..Default::default().Some(0)is rejected.
- Migration: Add
- perf(cubecl): respect memory order in comparison and mask fill (#6331) @EthanAlmloff
- fix(nn): support asymmetric Same padding in Conv3d (#6289) @michele-xilo
- perf(flex): vectorize f32 log1p, atanh, log_sigmoid and its backward (#6345) @antimora
- ComputeEnvironment: a device's compiled kernels and autotune answers, wherever it runs (#6335) @nathanielsimard
- feat!: Device::metal() is cubecl's Metal; sliding-window attention (#6333) @louisfd
- perf(flex): vectorize clamp, sign and integer powi (#6351) @antimora
- feat(group): sharding rules for attention and layout ops (#6372) @ThierryCantin-Demers
- perf(flex): vectorize f32 sin, cos and tan (#6347) @antimora
- feat(optim): train a split model as a pipeline with GPipe or 1F1B (#6340) @ThierryCantin-Demers
- Migration: Signals used for pipeline training derive
AutodiffSignal.Learnerintegration is not included.
- Migration: Signals used for pipeline training derive
- perf(flex): vectorize f32 atan, asin and acos (#6352) @antimora
- chore: bump cubek to 8bfd608 and cubecl to d88b0fe (#6378) @SamuelBelanger
- ComputeEnvironment::merge: bring another environment's entries in (#6373) @nathanielsimard
- feat(random)!: introduce explicit per-operation random keys (#6371) @laggui
- Migration: Operations now reserve a
RandomKeywhen requested; reseeding does not change already queued operations. Seeded sequences change. Backend implementors must providenext_random_keyand accept a key in random-operation methods. Implicit random operations during graph capture are unsupported; supply explicit keys.
- Migration: Operations now reserve a
- perf(flex): add a two-input SIMD driver for atan2, hypot and backward ops (#6353) @antimora
- perf(cubecl): F32 unit convolution, im2col gather, and split depthwise wgrad in conv autotune (#6048) @znicelya
- perf(cubecl): autotune folded vs copy for sum_dims (#6376) @EthanAlmloff
- ci: cancel CI run when a PR is merged or closed (#6385) @laggui
- refactor(shard): rename burn-group to burn-shard (#6386) @ThierryCantin-Demers
- Migration: Replace the
groupfeature andburn-groupcrate withshardandburn-shard, andDevice::group_optionswithDevice::shard_options.
- Migration: Replace the
- fix(dispatch): use the target's bool storage in cross-backend bool_to_device (#6392) @Jannik0
- feat(shard): sharding rules for every elementwise, reduce and along-dim op (#6387) @ThierryCantin-Demers
- docs: correct core and RMSProp API documentation (#6359) @Mikyx-1
- perf(flex): allocate zeros and repeat_dim output without a realigning copy (#6384) @antimora
- Bump cubek to cf74e11 and cubecl to 15135ee (#6398) @nathanielsimard
- feat(shard): run backend-extension custom ops on a sharded compute device (#6395) @ThierryCantin-Demers
- perf(dispatch): forward quantized argmax, argmin, gather and dynamic quantize (#6383) @antimora
- feat(derive): support named fields in enum Module variants (#6388) @vincentmasse
- feat(shard): load records into split params (#6397) @ThierryCantin-Demers
- feat(tensor): support smaller gather/scatter indices on non-indexed dimensions (#6381) @HarpeLm
- chore: cubek at main 2014d34; burn-vision test cast fix (#6399) @louisfd
- feat(train): add regression metrics (MSE, MAE, R2Score) (#6390) @divakantpandey
- feat(shard)!: split quantized tensors between their quantization blocks (#6396) @ThierryCantin-Demers
- Migration: Quantized splits must preserve whole quantization blocks and packed words.
- fix(ci): install Rust in the valgrind job and scope it to the CPU crates (#6380) @glaziermag
- fix(cubecl): update CubeCL and CubeK to fix Vulkan atomic results (#6407) @laggui
- fix(backend): truncate integer powers with negative exponents (#6355) @b84330808
- feat(fusion): support smaller gather indices with shared coordinate mapping (#6400) @laggui
- feat(fusion): fused elementwise kernels walk storage tiles; quant tests (#6406) @louisfd
- ci: add GPU zone fallback and extend test timeouts (#6410) @syl20bnr
- chore: bump cubecl and cubek for the paired ldmatrix fix and the gated delta walk in slots (#6413) @SamuelBelanger
- fix: drop the routes field cubek's matmul call no longer has (#6415) @SamuelBelanger
- feat: attention over a key/value cache; MatmulCall without routes (#6417) @louisfd
- Migration: Pass
Nonefor the new cache argument beforeoptionsto preserve attention over the supplied keys and values. Upgrade remote clients and servers together for protocol version 12.
- Migration: Pass
- feat(data): add
drop_lastto the data loader (#5911) @ProgrammerProfi - chore: pin cubek at main 86cbac9 (cubecl 565108e) (#6424) @louisfd
- Urgent: pin cubek at main cbd60ad, cubecl at d3d7282 (cubecl#2087) (#6426) @louisfd
- fix(cubecl): respect index tensor layouts in reductions and max pooling (#6428) @laggui
- feat(shard)!: the caller makes a sharded tensor's shards (#6408) @ThierryCantin-Demers
- Migration: Create tensors on the member devices and join them with
Tensor::from_shards; useinto_shardsto extract them.
- Migration: Create tensors on the member devices and join them with
- fix(router): register a tensor read before the drop of a handle given up meanwhile (#6405) @ThierryCantin-Demers
- docs(flex): refresh benchmarks against the April 2026 baseline (#6416) @antimora
- perf(flex): vectorize f32 sinh and cosh (#6354) @antimora
- ci: reduce host test compilation time (#6425) @laggui
- feat(shard): capture a graph on every member of a sharded compute device (#6429) @ThierryCantin-Demers
- feat(instrument): attribute and time each member of a sharded compute device (#6430) @ThierryCantin-Demers
- chore: pin cubek at main eb332b8 (cubecl 3e6d4f3) (#6427) @louisfd
- perf(cubecl) add wgrad_split_implicit candidate (#6319) @EthanAlmloff
- docs: organize changelog by feature to reduce merge conflicts (#6433) @laggui
- fix(tensor): enforce destination bool storage during transfers (#6414) @laggui
- Migration: Boolean transfers now carry the destination's boolean dtype, requiring corresponding backend and bridge implementations to accept it (see also #6392).
- perf(fusion): collective parts queue on the members' streams (#6438) @louisfd
- chore: bump cubecl and cubek for the staggered tile storage (#6445) @nathanielsimard
- fix(remote): wait for test clients to exit before cleanup (#6447) @laggui
- ci: narrow coverage collection (#6453) @laggui
- chore: prepare 0.23.0-pre.2 release (#6459) @laggui