From 4c8cd8461e5a67ab7dacf5b2125046c3a4107268 Mon Sep 17 00:00:00 2001 From: sayakpaul Date: Tue, 27 Jan 2026 15:46:30 +0800 Subject: [PATCH 1/8] feat: implement utils to check for kernel freshness. --- .../workflows/biweekly_freshness_check.yml | 27 ++ .github/workflows/test_kernel_mapping.yml | 27 ++ scripts/check_kernel_freshness.py | 291 ++++++++++++++++++ scripts/test_kernel_mapping.py | 74 +++++ 4 files changed, 419 insertions(+) create mode 100644 .github/workflows/biweekly_freshness_check.yml create mode 100644 .github/workflows/test_kernel_mapping.yml create mode 100644 scripts/check_kernel_freshness.py create mode 100644 scripts/test_kernel_mapping.py diff --git a/.github/workflows/biweekly_freshness_check.yml b/.github/workflows/biweekly_freshness_check.yml new file mode 100644 index 000000000..cea5a2ceb --- /dev/null +++ b/.github/workflows/biweekly_freshness_check.yml @@ -0,0 +1,27 @@ +name: Bi-Weekly Kernel Freshness Check + +on: + schedule: + - cron: "0 2 1,15 * *" + workflow_dispatch: + +jobs: + freshness-check: + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: "3.11" + + - name: Check kernel freshness and report + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + python scripts/check_kernel_freshness.py --verbose diff --git a/.github/workflows/test_kernel_mapping.yml b/.github/workflows/test_kernel_mapping.yml new file mode 100644 index 000000000..97df12d11 --- /dev/null +++ b/.github/workflows/test_kernel_mapping.yml @@ -0,0 +1,27 @@ +name: Test Kernel Mapping + +on: + pull_request: + branches: + - main + push: + branches: + - main + workflow_dispatch: + +jobs: + test-mapping: + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v6 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: "3.11" + + - name: Test kernel mapping completeness + run: | + cd scripts + python test_kernel_mapping.py diff --git a/scripts/check_kernel_freshness.py b/scripts/check_kernel_freshness.py new file mode 100644 index 000000000..d1e57c45d --- /dev/null +++ b/scripts/check_kernel_freshness.py @@ -0,0 +1,291 @@ +import argparse +import json +import logging +import os +import subprocess +import sys +from concurrent.futures import ThreadPoolExecutor, as_completed +from datetime import datetime, timezone +from pathlib import Path +from urllib import error, request +import random + + +KERNEL_SOURCE_MAPPING = { + "activation": "https://github.com/vllm-project/vllm", + "causal-conv1d": "https://github.com/Dao-AILab/causal-conv1d", + "deformable-detr": "https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch", + "flash-attn2": "https://github.com/Dao-AILab/flash-attention", + "flash-attn3": "https://github.com/Dao-AILab/flash-attention", + "fp8-fbgemm": "https://github.com/pytorch/FBGEMM", + "gpt-oss-metal-kernels": "https://github.com/openai/gpt-oss", + "layer_norm": "https://github.com/Dao-AILab/flash-attention", + "mamba-ssm": "https://github.com/state-spaces/mamba", + "megablocks": "https://github.com/databricks/megablocks", + "mra": "", # TODO: Add source URL + "paged-attention": "https://github.com/vllm-project/vllm", + "punica-sgmv": "https://github.com/punica-ai/punica", + "quantization-bitsandbytes": "https://github.com/bitsandbytes-foundation/bitsandbytes", + "quantization-eetq": "https://github.com/NetEase-FuXi/EETQ", + "quantization-gptq": "https://github.com/IST-DASLab/gptq", + "relu": "https://github.com/huggingface/kernel-builder", + "rmsnorm": "https://github.com/intel/intel-extension-for-pytorch", + "rotary": "https://github.com/Dao-AILab/flash-attention", + "rwkv": "https://github.com/BlinkDL/RWKV-LM", + "scattermoe": "https://github.com/shawntan/scattermoe", + "tinygrad-rms": "https://github.com/tinygrad/tinygrad", + "trimul_gpumode": "https://github.com/davidberard98/gpumode-trimul", + "vllm-flash-attn3": "https://github.com/Dao-AILab/flash-attention", + "yoso": "https://github.com/mlpen/YOSO", +} + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument( + "--root", + type=str, + default=".", + help="Root directory of the kernels-community repository.", + ) + parser.add_argument( + "--limit", + type=int, + default=None, + help="Specify if the number of kernel to be checked should be limited. If specified, `limit` number of entries will be chosen randomly from `KERNEL_SOURCE_MAPPING`, Must specify `--dry-run` to enable." + ) + parser.add_argument( + "--slack-webhook", default=os.getenv("SLACK_WEBHOOK_URL"), + ) + parser.add_argument( + "--github-token", default=os.getenv("GITHUB_TOKEN"), + ) + parser.add_argument( + "--dry-run", + action="store_true", + help="Run without posting to Slack.", + ) + parser.add_argument("--max-workers", type=int, default=4) + args = parser.parse_args() + + if args.limit and not args.dry_run: + raise ValueError("Must set `--dry-run` when supplying `--limit`.") + + return args + +def _random_subdict(d: dict, n: int) -> dict: + if n > len(d): + raise ValueError("n cannot be larger than the dict size") + keys = random.sample(list(d.keys()), n) + return {k: d[k] for k in keys} + + +def _github_api_request(url: str, token: str | None = None) -> dict: + headers = {"Accept": "application/vnd.github.v3+json"} + if token: + headers["Authorization"] = f"token {token}" + + req = request.Request(url, headers=headers) + try: + with request.urlopen(req, timeout=30) as response: + return json.loads(response.read().decode()) + except error.HTTPError as e: + print(f"HTTP error {e.code} for {url}: {e.reason}") + raise + except error.URLError as e: + print(f"URL error for {url}: {e.reason}") + raise + + +def _get_upstream_last_commit_date(repo_url: str, token: str | None = None) -> datetime | None: + parts = repo_url.rstrip("/").split("/") + owner, repo = parts[-2], parts[-1] + + for branch in ["main", "master"]: + api_url = f"https://api.github.com/repos/{owner}/{repo}/commits/{branch}" + try: + data = _github_api_request(api_url, token) + commit_date_str = data["commit"]["committer"]["date"] + # ISO 8601 format: 2024-01-27T12:34:56Z + commit_date = datetime.strptime(commit_date_str, "%Y-%m-%dT%H:%M:%SZ").replace(tzinfo=timezone.utc) + logging.debug(f"Upstream {repo_url} ({branch}): last commit {commit_date}") + return commit_date + except (error.HTTPError, KeyError) as e: + if branch == "master": + print(f"Failed to get commit from {repo_url}: {e}") + return None + continue + + return None + + +def _get_local_kernel_last_commit_date(kernel_dir: Path) -> datetime | None: + try: + result = subprocess.run( + ["git", "log", "-1", "--format=%cI", "--", str(kernel_dir)], + capture_output=True, + text=True, + check=True, + cwd=kernel_dir.parent, + ) + commit_date_str = result.stdout.strip() + if not commit_date_str: + print(f"No commits found for {kernel_dir}") + return None + + # ISO 8601 format with timezone + commit_date = datetime.fromisoformat(commit_date_str) + logging.debug(f"Local {kernel_dir.name}: last commit {commit_date}") + return commit_date + except subprocess.CalledProcessError as e: + print(f"Failed to get git log for {kernel_dir}: {e}") + return None + + +def _check_single_kernel( + kernel_dir: str, + source_url: str, + root_path: Path, + github_token: str | None = None, +) -> dict | None: + print(f"Checking {kernel_dir}...") + + kernel_path = root_path / kernel_dir + if not kernel_path.exists(): + print(f"Kernel directory {kernel_path} does not exist, skipping") + return None + + if not source_url: + print(f"Skipping {kernel_dir}: no source URL configured") + return None + + upstream_date = _get_upstream_last_commit_date(source_url, github_token) + if upstream_date is None: + print(f"Could not get upstream date for {kernel_dir}, skipping") + return None + + local_date = _get_local_kernel_last_commit_date(kernel_path) + if local_date is None: + print(f"Could not get local date for {kernel_dir}, skipping") + return None + + diff = upstream_date - local_date + days_behind = diff.days + + if days_behind > 0: + print(f" {kernel_dir}: upstream is {days_behind} days newer") + return { + "kernel_dir": kernel_dir, + "source_url": source_url, + "days_behind": days_behind, + "upstream_date": upstream_date, + "local_date": local_date, + } + else: + print(f" {kernel_dir}: up to date") + return None + + +def check_kernel_freshness( + root_path: Path, + github_token: str | None = None, + max_workers: int = 10, + limit: int = None +) -> list[dict]: + mapping_to_use = KERNEL_SOURCE_MAPPING + + if limit: + print(f"Limiting the check to {limit} kernels.") + mapping_to_use = _random_subdict(mapping_to_use, limit) + + results = [] + + with ThreadPoolExecutor(max_workers=max_workers) as executor: + future_to_kernel = { + executor.submit( + _check_single_kernel, + kernel_dir, + source_url, + root_path, + github_token, + ): kernel_dir + for kernel_dir, source_url in mapping_to_use.items() + } + + for future in as_completed(future_to_kernel): + kernel_dir = future_to_kernel[future] + try: + result = future.result() + if result: + results.append(result) + except Exception as exc: + print(f"Error checking {kernel_dir}: {exc}") + + return results + + +def _format_freshness_report(results: list[dict]) -> str: + sorted_results = sorted(results, key=lambda x: x["days_behind"], reverse=True) + + heading = f"šŸ“Š Kernel Freshness Report - {len(sorted_results)} kernel(s) behind upstream" + + items = [] + for result in sorted_results: + items.append(f"• {result['source_url']}: upstream is {result['days_behind']} days newer") + + report = f"{heading}\n\n" + "\n".join(items) + + repository = os.getenv("GITHUB_REPOSITORY") + run_id = os.getenv("GITHUB_RUN_ID") + if repository and run_id: + action_url = f"https://github.com/{repository}/actions/runs/{run_id}" + report += f"\n\nRun: {action_url}" + + return report + + +def _post_to_slack(webhook_url: str, message: str) -> None: + payload = {"text": message} + + data = json.dumps(payload).encode("utf-8") + req = request.Request(webhook_url, data=data, headers={"Content-Type": "application/json"}) + with request.urlopen(req, timeout=10) as response: + response.read() + + +def main() -> int: + args = parse_args() + + root_path = Path(args.root).resolve() + print(f"Using root path: {root_path}") + print(f"Using {args.max_workers} worker threads for parallel checking") + + results = check_kernel_freshness(root_path, args.github_token, args.max_workers, args.limit) + + if not results: + print("\nāœ… All kernel directories are up to date with their upstream sources!") + return 0 + + report = _format_freshness_report(results) + print("\n" + report) + + if args.dry_run: + print("Dry-run mode; skipping Slack notification.") + return 0 + + if not args.slack_webhook: + print("Slack webhook URL is not provided; skipping Slack notification.") + return 0 + + try: + _post_to_slack(args.slack_webhook, report) + print("āœ… Sent Slack notification for kernel freshness report.") + except error.URLError as e: + print(f"Failed to send Slack notification: {e}") + return 1 + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/test_kernel_mapping.py b/scripts/test_kernel_mapping.py new file mode 100644 index 000000000..ab619ebb6 --- /dev/null +++ b/scripts/test_kernel_mapping.py @@ -0,0 +1,74 @@ +import sys +from pathlib import Path + +from check_kernel_freshness import KERNEL_SOURCE_MAPPING + + +def discover_kernel_dirs(root_path: Path) -> list[str]: + excluded_dirs = {".github", "scripts", ".git"} + + kernel_dirs = [] + for item in root_path.iterdir(): + if item.is_dir() and item.name not in excluded_dirs: + kernel_dirs.append(item.name) + + return sorted(kernel_dirs) + + +def test_kernel_mapping_completeness(root_path: Path) -> bool: + all_passed = True + + kernel_dirs = discover_kernel_dirs(root_path) + print(f"Found {len(kernel_dirs)} kernel directories: {kernel_dirs}") + + mapped_dirs = set(KERNEL_SOURCE_MAPPING.keys()) + print(f"Found {len(mapped_dirs)} entries in KERNEL_SOURCE_MAPPING") + + unmapped_dirs = set(kernel_dirs) - mapped_dirs + if unmapped_dirs: + print(f"\nāŒ ERROR: The following kernel directories are missing from KERNEL_SOURCE_MAPPING:") + for dir_name in sorted(unmapped_dirs): + print(f" - {dir_name}") + all_passed = False + else: + print("\nāœ… All kernel directories are present in KERNEL_SOURCE_MAPPING") + + invalid_entries = [] + for kernel_dir, source_url in KERNEL_SOURCE_MAPPING.items(): + if not source_url: + invalid_entries.append(kernel_dir) + + if invalid_entries: + print(f"\nāŒ ERROR: The following entries have None or empty source URLs:") + for dir_name in sorted(invalid_entries): + print(f" - {dir_name}: {KERNEL_SOURCE_MAPPING[dir_name]!r}") + all_passed = False + else: + print("āœ… All entries in KERNEL_SOURCE_MAPPING have valid source URLs") + + extra_dirs = mapped_dirs - set(kernel_dirs) + if extra_dirs: + print(f"\nāŒ ERROR: The following entries in KERNEL_SOURCE_MAPPING don't have corresponding directories:") + for dir_name in sorted(extra_dirs): + print(f" - {dir_name}") + all_passed = False + else: + print("āœ… All entries in KERNEL_SOURCE_MAPPING have corresponding directories") + + return all_passed + + +def main() -> int: + root_path = Path(__file__).parent.parent.resolve() + print(f"Testing kernel mapping in: {root_path}\n") + + if test_kernel_mapping_completeness(root_path): + print("\nāœ… All tests passed!") + return 0 + else: + print("\nāŒ Some tests failed!") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) From f8210d43bd58b4c0f449e7f295b4d11ec2de9a41 Mon Sep 17 00:00:00 2001 From: Sayak Paul Date: Wed, 28 Jan 2026 09:29:11 +0530 Subject: [PATCH 2/8] Apply suggestions from code review Co-authored-by: drbh --- scripts/check_kernel_freshness.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/check_kernel_freshness.py b/scripts/check_kernel_freshness.py index d1e57c45d..40c100cf9 100644 --- a/scripts/check_kernel_freshness.py +++ b/scripts/check_kernel_freshness.py @@ -90,6 +90,10 @@ def _github_api_request(url: str, token: str | None = None) -> dict: with request.urlopen(req, timeout=30) as response: return json.loads(response.read().decode()) except error.HTTPError as e: + if e.code == 422: + # 422 means the branch does not exist and we only check main/master + # so we can ignore this error + raise print(f"HTTP error {e.code} for {url}: {e.reason}") raise except error.URLError as e: From fb31a5f71bf490ca67da5cc614c1e5af118edf78 Mon Sep 17 00:00:00 2001 From: sayakpaul Date: Wed, 28 Jan 2026 15:42:18 +0530 Subject: [PATCH 3/8] up --- scripts/check_kernel_freshness.py | 2 -- scripts/test_kernel_mapping.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/check_kernel_freshness.py b/scripts/check_kernel_freshness.py index 40c100cf9..c6efa3835 100644 --- a/scripts/check_kernel_freshness.py +++ b/scripts/check_kernel_freshness.py @@ -28,7 +28,6 @@ "quantization-bitsandbytes": "https://github.com/bitsandbytes-foundation/bitsandbytes", "quantization-eetq": "https://github.com/NetEase-FuXi/EETQ", "quantization-gptq": "https://github.com/IST-DASLab/gptq", - "relu": "https://github.com/huggingface/kernel-builder", "rmsnorm": "https://github.com/intel/intel-extension-for-pytorch", "rotary": "https://github.com/Dao-AILab/flash-attention", "rwkv": "https://github.com/BlinkDL/RWKV-LM", @@ -39,7 +38,6 @@ "yoso": "https://github.com/mlpen/YOSO", } - def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser() parser.add_argument( diff --git a/scripts/test_kernel_mapping.py b/scripts/test_kernel_mapping.py index ab619ebb6..794dd8872 100644 --- a/scripts/test_kernel_mapping.py +++ b/scripts/test_kernel_mapping.py @@ -5,7 +5,7 @@ def discover_kernel_dirs(root_path: Path) -> list[str]: - excluded_dirs = {".github", "scripts", ".git"} + excluded_dirs = {".github", "scripts", ".git", "relu"} kernel_dirs = [] for item in root_path.iterdir(): From d19c4e148704c6420b44197273146c5eddc763be Mon Sep 17 00:00:00 2001 From: sayakpaul Date: Mon, 9 Feb 2026 16:49:40 +0530 Subject: [PATCH 4/8] address review feedback. --- ...g.yml => test_kernel_freshness_lookup.yml} | 4 +-- scripts/check_kernel_freshness.py | 35 ++++++++++++++----- ...ing.py => test_kernel_freshness_lookup.py} | 14 ++++++-- 3 files changed, 40 insertions(+), 13 deletions(-) rename .github/workflows/{test_kernel_mapping.yml => test_kernel_freshness_lookup.yml} (81%) rename scripts/{test_kernel_mapping.py => test_kernel_freshness_lookup.py} (85%) diff --git a/.github/workflows/test_kernel_mapping.yml b/.github/workflows/test_kernel_freshness_lookup.yml similarity index 81% rename from .github/workflows/test_kernel_mapping.yml rename to .github/workflows/test_kernel_freshness_lookup.yml index 97df12d11..f42d17e55 100644 --- a/.github/workflows/test_kernel_mapping.yml +++ b/.github/workflows/test_kernel_freshness_lookup.yml @@ -21,7 +21,7 @@ jobs: with: python-version: "3.11" - - name: Test kernel mapping completeness + - name: Test kernel lookup completeness run: | cd scripts - python test_kernel_mapping.py + python test_kernel_freshness_lookup.py diff --git a/scripts/check_kernel_freshness.py b/scripts/check_kernel_freshness.py index c6efa3835..033a26624 100644 --- a/scripts/check_kernel_freshness.py +++ b/scripts/check_kernel_freshness.py @@ -22,7 +22,7 @@ "layer_norm": "https://github.com/Dao-AILab/flash-attention", "mamba-ssm": "https://github.com/state-spaces/mamba", "megablocks": "https://github.com/databricks/megablocks", - "mra": "", # TODO: Add source URL + "mra": "", "paged-attention": "https://github.com/vllm-project/vllm", "punica-sgmv": "https://github.com/punica-ai/punica", "quantization-bitsandbytes": "https://github.com/bitsandbytes-foundation/bitsandbytes", @@ -36,6 +36,13 @@ "trimul_gpumode": "https://github.com/davidberard98/gpumode-trimul", "vllm-flash-attn3": "https://github.com/Dao-AILab/flash-attention", "yoso": "https://github.com/mlpen/YOSO", + "cv-utils": "", + "liger-kernels": "https://github.com/linkedin/Liger-Kernel", + "gpt-oss-triton-kernels": "", + "metal-flash-sdpa": "https://github.com/philipturner/metal-flash-attention", + "mlx-rmsnorm": "", + "sage-attention": "https://github.com/thu-ml/SageAttention", + } def parse_args() -> argparse.Namespace: @@ -189,11 +196,11 @@ def _check_single_kernel( def check_kernel_freshness( - root_path: Path, - github_token: str | None = None, + root_path: Path, + github_token: str | None = None, max_workers: int = 10, limit: int = None -) -> list[dict]: +) -> tuple[list[dict], list[str]]: mapping_to_use = KERNEL_SOURCE_MAPPING if limit: @@ -201,6 +208,11 @@ def check_kernel_freshness( mapping_to_use = _random_subdict(mapping_to_use, limit) results = [] + skipped_kernels = [] + + for kernel_dir, source_url in mapping_to_use.items(): + if source_url == "": + skipped_kernels.append(kernel_dir) with ThreadPoolExecutor(max_workers=max_workers) as executor: future_to_kernel = { @@ -223,10 +235,10 @@ def check_kernel_freshness( except Exception as exc: print(f"Error checking {kernel_dir}: {exc}") - return results + return results, skipped_kernels -def _format_freshness_report(results: list[dict]) -> str: +def _format_freshness_report(results: list[dict], skipped_kernels: list[str]) -> str: sorted_results = sorted(results, key=lambda x: x["days_behind"], reverse=True) heading = f"šŸ“Š Kernel Freshness Report - {len(sorted_results)} kernel(s) behind upstream" @@ -237,6 +249,11 @@ def _format_freshness_report(results: list[dict]) -> str: report = f"{heading}\n\n" + "\n".join(items) + if skipped_kernels: + report += f"\n\nšŸ”• Freshness check intentionally skipped for" + for kernel in sorted(skipped_kernels): + report += f"\n• {kernel}" + repository = os.getenv("GITHUB_REPOSITORY") run_id = os.getenv("GITHUB_RUN_ID") if repository and run_id: @@ -262,13 +279,15 @@ def main() -> int: print(f"Using root path: {root_path}") print(f"Using {args.max_workers} worker threads for parallel checking") - results = check_kernel_freshness(root_path, args.github_token, args.max_workers, args.limit) + results, skipped_kernels = check_kernel_freshness(root_path, args.github_token, args.max_workers, args.limit) if not results: print("\nāœ… All kernel directories are up to date with their upstream sources!") + if skipped_kernels: + print(f"Note: {len(skipped_kernels)} kernel(s) were intentionally skipped (no source URL configured)") return 0 - report = _format_freshness_report(results) + report = _format_freshness_report(results, skipped_kernels) print("\n" + report) if args.dry_run: diff --git a/scripts/test_kernel_mapping.py b/scripts/test_kernel_freshness_lookup.py similarity index 85% rename from scripts/test_kernel_mapping.py rename to scripts/test_kernel_freshness_lookup.py index 794dd8872..640d24168 100644 --- a/scripts/test_kernel_mapping.py +++ b/scripts/test_kernel_freshness_lookup.py @@ -33,18 +33,26 @@ def test_kernel_mapping_completeness(root_path: Path) -> bool: else: print("\nāœ… All kernel directories are present in KERNEL_SOURCE_MAPPING") + skipped_entries = [] invalid_entries = [] for kernel_dir, source_url in KERNEL_SOURCE_MAPPING.items(): - if not source_url: + if source_url == "": + skipped_entries.append(kernel_dir) + elif not source_url: invalid_entries.append(kernel_dir) + if skipped_entries: + print(f"\nā„¹ļø INFO: The following entries have empty source URLs (intentionally skipped):") + for dir_name in sorted(skipped_entries): + print(f" - {dir_name}") + if invalid_entries: - print(f"\nāŒ ERROR: The following entries have None or empty source URLs:") + print(f"\nāŒ ERROR: The following entries have None or invalid source URLs:") for dir_name in sorted(invalid_entries): print(f" - {dir_name}: {KERNEL_SOURCE_MAPPING[dir_name]!r}") all_passed = False else: - print("āœ… All entries in KERNEL_SOURCE_MAPPING have valid source URLs") + print("āœ… All entries in KERNEL_SOURCE_MAPPING have valid or intentionally empty source URLs") extra_dirs = mapped_dirs - set(kernel_dirs) if extra_dirs: From 52f1025af57ed84d801b50f5f4611dd1c0b23eb0 Mon Sep 17 00:00:00 2001 From: Sayak Paul Date: Thu, 12 Feb 2026 18:57:47 +0530 Subject: [PATCH 5/8] Apply suggestions from code review Co-authored-by: Mohamed Mekkouri <93391238+MekkCyber@users.noreply.github.com> --- scripts/check_kernel_freshness.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/check_kernel_freshness.py b/scripts/check_kernel_freshness.py index 033a26624..ddbf92d01 100644 --- a/scripts/check_kernel_freshness.py +++ b/scripts/check_kernel_freshness.py @@ -38,9 +38,9 @@ "yoso": "https://github.com/mlpen/YOSO", "cv-utils": "", "liger-kernels": "https://github.com/linkedin/Liger-Kernel", - "gpt-oss-triton-kernels": "", + "gpt-oss-triton-kernels": "https://github.com/triton-lang/triton", "metal-flash-sdpa": "https://github.com/philipturner/metal-flash-attention", - "mlx-rmsnorm": "", + "mlx-rmsnorm": "https://github.com/ml-explore/mlx", "sage-attention": "https://github.com/thu-ml/SageAttention", } From e621fa93cd65451469b222824054e1408fe3217b Mon Sep 17 00:00:00 2001 From: sayakpaul Date: Fri, 13 Feb 2026 09:48:01 +0530 Subject: [PATCH 6/8] feedback. --- scripts/check_kernel_freshness.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/check_kernel_freshness.py b/scripts/check_kernel_freshness.py index ddbf92d01..de526c38f 100644 --- a/scripts/check_kernel_freshness.py +++ b/scripts/check_kernel_freshness.py @@ -12,9 +12,9 @@ KERNEL_SOURCE_MAPPING = { - "activation": "https://github.com/vllm-project/vllm", + "activation": "", "causal-conv1d": "https://github.com/Dao-AILab/causal-conv1d", - "deformable-detr": "https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch", + "deformable-detr": "", "flash-attn2": "https://github.com/Dao-AILab/flash-attention", "flash-attn3": "https://github.com/Dao-AILab/flash-attention", "fp8-fbgemm": "https://github.com/pytorch/FBGEMM", @@ -23,11 +23,11 @@ "mamba-ssm": "https://github.com/state-spaces/mamba", "megablocks": "https://github.com/databricks/megablocks", "mra": "", - "paged-attention": "https://github.com/vllm-project/vllm", - "punica-sgmv": "https://github.com/punica-ai/punica", + "paged-attention": "", + "punica-sgmv": "https://github.com/predibase/lorax", "quantization-bitsandbytes": "https://github.com/bitsandbytes-foundation/bitsandbytes", "quantization-eetq": "https://github.com/NetEase-FuXi/EETQ", - "quantization-gptq": "https://github.com/IST-DASLab/gptq", + "quantization-gptq": "", "rmsnorm": "https://github.com/intel/intel-extension-for-pytorch", "rotary": "https://github.com/Dao-AILab/flash-attention", "rwkv": "https://github.com/BlinkDL/RWKV-LM", From bcf9324b1c14059dc98d7d4282de5d6735d6988a Mon Sep 17 00:00:00 2001 From: drbh Date: Tue, 17 Feb 2026 12:08:23 -0500 Subject: [PATCH 7/8] feat: add flash mla --- scripts/check_kernel_freshness.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/check_kernel_freshness.py b/scripts/check_kernel_freshness.py index de526c38f..da50cfc87 100644 --- a/scripts/check_kernel_freshness.py +++ b/scripts/check_kernel_freshness.py @@ -17,6 +17,7 @@ "deformable-detr": "", "flash-attn2": "https://github.com/Dao-AILab/flash-attention", "flash-attn3": "https://github.com/Dao-AILab/flash-attention", + "flash-mla": "https://github.com/deepseek-ai/FlashMLA", "fp8-fbgemm": "https://github.com/pytorch/FBGEMM", "gpt-oss-metal-kernels": "https://github.com/openai/gpt-oss", "layer_norm": "https://github.com/Dao-AILab/flash-attention", From 2e2562a9b1b771e58edf721c244aafa99efa090e Mon Sep 17 00:00:00 2001 From: drbh Date: Tue, 17 Feb 2026 12:10:41 -0500 Subject: [PATCH 8/8] fix: add mlx-quantization-metal-kernels --- scripts/check_kernel_freshness.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/check_kernel_freshness.py b/scripts/check_kernel_freshness.py index da50cfc87..3c375b85e 100644 --- a/scripts/check_kernel_freshness.py +++ b/scripts/check_kernel_freshness.py @@ -41,6 +41,7 @@ "liger-kernels": "https://github.com/linkedin/Liger-Kernel", "gpt-oss-triton-kernels": "https://github.com/triton-lang/triton", "metal-flash-sdpa": "https://github.com/philipturner/metal-flash-attention", + "mlx-quantization-metal-kernels": "https://github.com/ml-explore/mlx", "mlx-rmsnorm": "https://github.com/ml-explore/mlx", "sage-attention": "https://github.com/thu-ml/SageAttention",