mirror of
https://github.com/linkedin/Liger-Kernel.git
synced 2026-10-12 02:17:47 +00:00
## Summary The three opt-in GPU DSL backends — **cutedsl**, **cutile**, and **cute** (fused-MoE) — had their tests inconsistently placed: a partial `test/cutedsl/` folder existed, but most DSL tests were scattered in `test/transformers/`. This PR gives each DSL its **own test folder**, mirroring the existing `test/cutedsl/` convention (drop the DSL prefix from filenames), and wires up matching `make` targets. One minor change in cron schedule for nvidia-ci. ## Changes ### cutedsl → `test/cutedsl/` - Moved `test_cutedsl_fused_linear_cross_entropy_sm90` → `test_fused_linear_cross_entropy_sm90` - Moved `test_cutedsl_rms_norm_fastpath` → `test_rms_norm_fastpath` - Moved `test_cutedsl_rope` → `test_rope` - Moved `test_swiglu_cutedsl` → `test_swiglu` - **Deleted** `test_cutedsl_rms_norm` — it was a duplicate *subset* of the canonical `test/cutedsl/test_rms_norm.py` (same two test-function names; the canonical file is a strict superset with the extra Blackwell fast-path tests and stricter mode-specific bf16 dW tolerances). Deleting avoids a filename + test-name collision; the canonical file is left untouched. - Fixed a stale docstring path in `test/cutedsl/test_backend.py`. ### cutile → new `test/cutile/` - Moved `test_cutile_backend` → `test_backend`, `test_cutile_fused_linear_cross_entropy_sm90` → `test_fused_linear_cross_entropy_sm90`, `test_cutile_rms_norm` → `test_rms_norm`, `test_cutile_rope` → `test_rope`, `test_cutile_swiglu` → `test_swiglu`. - **Split** the 7 env-gated `test_cutile_*` tests out of the shared `test/transformers/test_fused_linear_scaled_cross_entropy.py` into `test/cutile/test_fused_linear_scaled_cross_entropy.py`. The backend-agnostic frontend/dispatcher tests stay in `test/transformers/`. ### cute (fused-MoE) → new `test/cute/` - Moved `test_cute_moe_autograd` → `test_moe_autograd` and `test_moe` → `test_moe`. - `test_fused_moe.py` is the general Triton MoE test and **stays** in `test/transformers/`. ### Makefile - `test:` and `test-verbose:` now `--ignore=test/cutile` and `--ignore=test/cute` (and `test-verbose` also ignores `test/cutedsl` for consistency), so DSL tests run only via their dedicated targets. - New **`test-cutile`** (`LIGER_KERNEL_IMPL=cutile`, mirrors `test-cutedsl`). - New **`test-cute`** — intentionally does **not** set `LIGER_KERNEL_IMPL=cute`, because selecting it would force `import liger_kernel.ops` to load the separate `liger_cute_kernels` (lck) wheel and break the always-on registration/import-guard tests. ## Notes / decisions - All moves use `git mv` to preserve history. The `test.utils` import blocks in the moved rope/swiglu files were re-sorted by ruff because `test` is now first-party inside the packaged DSL folders. - **Coverage shift (intended):** a few always-on pure-Python tests (cutedsl rms_norm fastpath, cute registration/import-guard) previously ran under `make test`; they now run via the dedicated `test-*` targets, consistent with the one-folder-per-DSL model. - No new basename collisions: the DSL folders all have `__init__.py` (unique package-qualified module names) and are ignored by `make test`. ## Validation - `ruff check` and `ruff format --check` pass across the whole `test/` tree. - All affected files pass `py_compile`; `make -n` dry-runs verified for the new targets. - ⚠️ GPU/Modal test execution (`make test-cutedsl` / `test-cutile` / `test-cute`) was **not** run in this environment (no CUDA/torch available). These should be validated on a GPU host with the corresponding extras installed. --------- Co-authored-by: Copilot <[email protected]>