Overview
Liger Kernel v0.8.3 expands multi-DSL support across Triton, CuTe DSL, and cuTile, while adding new Hopper and Blackwell kernels for tensor-parallel losses, MoE, RMSNorm, and fused MLP workloads. The release also brings major correctness and performance improvements for MoE and Fused Linear Cross Entropy, broader Ascend NPU optimizations, and improved packaging and CI coverage across NVIDIA architectures.
Summary
Highlights of Liger Kernel v0.8.3 include:
- Multi-DSL backend infrastructure: Added a unified dispatcher and backend layer spanning Triton, CuTe DSL, and cuTile.
- Expanded CuTe DSL and cuTile coverage: Added implementations for RMSNorm, LayerNorm, fused add + RMSNorm, SwiGLU, GeGLU, Softmax, RoPE, KL divergence, JSD, Cross Entropy, Fused Linear Cross Entropy, and Fused Linear JSD.
- Tensor-parallel fused losses: Added Hopper and Blackwell implementations of tensor-parallel fused linear cross entropy and fused scaled cross entropy.
- Improved MoE kernels: Added architecture-specific SM90/SM100 paths, improved Hopper communication and backward synchronization, and fixed Blackwell/B300 input-gradient correctness.
- New fused operators: Added
LigerMLP, SM100 fused linear SwiGLU, andFusedLinearKLDivLossfor distillation workloads. - Faster and more memory-efficient FLCE: Improved logits-buffer reuse, direct input-gradient writes, low-precision weight-gradient accumulation, and workload-specific chunk sizing.
- Stronger Ascend NPU support: Optimized CE/FLCE, RMSNorm, RoPE, JSD, LayerNorm, and SwiGLU, alongside refreshed dependency versions.
- Improved packaging and CI: Added multi-architecture Liger Cute release wheels, fixed container builds, expanded B200 testing, and introduced GPU-aware CI scheduling.
- Seven new contributors: Welcome @TecJesh, @Pearblossom-M, @Dessalines39394, @yupengtang, @piyushumate, @xvxuopop, and @Yulong-Cauli!
What's Changed
- [Ascend] Fix missing accum_dtype param in fused_linear_jsd forward by @TecJesh in #1367
- feat: add LigerMLP module by @Pearblossom-M in #1357
- [CUDA] Add cuTile RMSNorm and optimize CuTe DSL RMSNorm by @kolehma8 in #1395
- [NPU] Pin torch/torch_npu=2.9.0, triton-ascend=3.2.2 and cann=9.1.0 for NPU by @zheliuyu in #1392
- Fix fused MoE backward stability and padding skips by @kolehma8 in #1398
- [cuTile] Add v3 cuTile backends for 6 Liger ops by @xjmxyt in #1321
- fix(cutile): handle 2-D (seq, head_dim) cos/sin in RoPE + add vision tests by @vaibhavjindal in #1399
- [cuTile] Fix SwiGLU non-power-of-2 forward cliff with exact-fit pow2 tiling by @vaibhavjindal in #1407
- [cuTeDSL] Make SwiGLU CUDA-graph capturable + harmonize plain SiLU-Mul tests by @vaibhavjindal in #1408
- ci: run NVIDIA GPU tests on manual dispatch and daily cron only by @vaibhavjindal in #1409
- Fix broken star history chart by @Dessalines39394 in #1385
- test: organize DSL tests into per-DSL folders (cutedsl/cutile/cute) by @vaibhavjindal in #1410
- Isolate SM90 and SM100 MoE kernel paths by @kolehma8 in #1412
- fix(fused_moe): correct input-gradient (dx) on Blackwell/B300 by @arde171 in #1413
- perf(flce): widen the transient-logits chunk-memory budget constant to C=16 by @arde171 in #1414
- ci: schedule NVIDIA tests by cadence/GPU with a hard 3-job concurrency cap by @vaibhavjindal in #1415
- fix(mlp): keep liger_kernel.ops importable without TensorDescriptor by @zheliuyu in #1421
- Update the ascend npu test repository link by @xuedinge233 in #1411
- [CUDA] Add Hopper tensor-parallel fused linear cross entropy by @kolehma8 in #1422
- fix(cutile): pin cuda-tile>=1.5.0 so CI gets CompilerOptions.num_worker_warps by @vaibhavjindal in #1427
- feat(backends): multi-DSL dispatcher foundation + Triton backend layer by @arde171 in #1416
- feat(cutedsl): CuTeDSL backends for RMSNorm, LayerNorm, fused_add_rms_norm by @arde171 in #1417
- feat(cutedsl): CuTeDSL backends for SwiGLU, GeGLU, Softmax, RoPE, KL-div, JSD by @arde171 in #1418
- Add Liger Kernel support for Muse Glimmer by @buffett0323 in #1390
- fix(cutedsl): fp32 CE loss precision on B200 + restore LigerCrossEntropyFunction export by @vaibhavjindal in #1430
- fix(cutedsl): self-skip SM100-only FLCE tests on SM90 (H100 CI) by @vaibhavjindal in #1431
- [CUDA] Add tensor-parallel fused scaled cross entropy frontend by @kolehma8 in #1428
- Use native CUTLASS + NVSHMEM package terminology by @kolehma8 in #1434
- ci(nvi): add cuTile tests on B200 to the daily run by @vaibhavjindal in #1436
- fix(mlp): correct SwiGLU backward_dI on Blackwell (SM100/B200) by @vaibhavjindal in #1435
- Update tests.py to use B200 instead of B200! by @vaibhavjindal in #1437
- feat(cutedsl): CuTeDSL backends for CrossEntropy, FusedLinearCE, FusedLinearJSD by @arde171 in #1419
- fix(monkey_patch): report the Liger name on patched gemma3/gemma4/exaone4 MLPs by @yupengtang in #1444
- perf(preference): skip dW/dB calculation when parameters are frozen by @piyushumate in #1441
- [NPU] Optimize Ascend CE/FLCE, RMSNorm, and RoPE kernels by @sunyi0505 in #1426
- fix(cutedsl): use the current stream for RMSNorm backward by @luca-888 in #1450
- Add SM100 fused linear SwiGLU by @justinhh4 in #1340
- feat(cutile): cuTile backends for RMSNorm, LayerNorm, Softmax, JSD, FusedLinearJSD by @arde171 in #1420
- perf(flce): accumulate low-precision Triton dW with addmm by @vaibhavjindal in #1454
- Add DTensor support for Ascend SwiGLU by @xvxuopop in #1448
- feat: add FusedLinearKLDivLoss (fused linear + KL divergence for distillation) by @Yulong-Cauli in #1423
- [NPU] Fix Ascend JSD UT failures and register LayerNorm dispatch by @sunyi0505 in #1452
- Specialize SM90 MoE communication and fix backward synchronization by @kolehma8 in #1463
- Add SM100 tensor-parallel fused scaled cross entropy by @kolehma8 in #1458
- Publish multi-architecture Liger Cute wheel on releases by @kolehma8 in #1465
- Fix Python setup in LCK container builds by @kolehma8 in #1466
- perf(flce): reuse logits buffers and write input gradients directly by @vaibhavjindal in #1468
- Fix remaining LCK container build dependencies by @kolehma8 in #1467
- Refresh LigerCute README figures and results by @kolehma8 in #1469
- Bump Liger packages to 0.8.3 by @kolehma8 in #1471
- Keep Triton FLCE C=1 by default and use C=8 for GPT-OSS by @kolehma8 in #1472
New Contributors
- @TecJesh made their first contribution in #1367
- @Pearblossom-M made their first contribution in #1357
- @Dessalines39394 made their first contribution in #1385
- @yupengtang made their first contribution in #1444
- @piyushumate made their first contribution in #1441
- @xvxuopop made their first contribution in #1448
- @Yulong-Cauli made their first contribution in #1423
Full Changelog: v0.8.2...v0.8.3