Files
wehub-resource-sync ec436095dd
Book-CI / test (macos-latest) (push) Waiting to run
Deploy / deploy (macos-latest) (push) Waiting to run
Deploy / deploy (ubuntu-latest) (push) Waiting to run
Deploy / deploy (windows-latest) (push) Waiting to run
Release to PyPI / Build & publish sglang-kt (push) Waiting to run
Release to PyPI / Build kt-kernel (Python 3.11) (push) Waiting to run
Release to PyPI / Build kt-kernel (Python 3.12) (push) Waiting to run
Release to PyPI / Publish kt-kernel to PyPI (push) Blocked by required conditions
Book-CI / test (ubuntu-latest) (push) Waiting to run
Book-CI / test (windows-latest) (push) Waiting to run
Release Fake Tag / publish (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 13:30:03 +08:00

121 lines
3.9 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
CPU feature detection script for kt-kernel.
This script checks if your CPU supports the required instruction sets for FP8 MoE:
- AVX512F (foundation)
- AVX512_BF16 (BF16 dot product)
- AVX512_VNNI (VNNI instructions)
- AVX512_VBMI (byte permutation)
Usage:
python3 scripts/check_cpu_features.py
"""
import os
import sys
def check_cpuinfo():
"""Check CPU features via /proc/cpuinfo."""
try:
with open("/proc/cpuinfo", "r") as f:
cpuinfo = f.read().lower()
return cpuinfo
except FileNotFoundError:
return None
def main():
print("=" * 70)
print("KT-Kernel CPU Feature Detection")
print("=" * 70)
print()
cpuinfo = check_cpuinfo()
if cpuinfo is None:
print("❌ /proc/cpuinfo not found (not on Linux?)")
print(" Cannot detect CPU features automatically.")
sys.exit(1)
# Extract CPU model
for line in cpuinfo.split("\n"):
if "model name" in line:
model = line.split(":")[1].strip()
print(f"CPU Model: {model}")
break
print()
# Check AMX support
print("AMX Support (Intel Sapphire Rapids+):")
amx_flags = ["amx_tile", "amx_int8", "amx_bf16"]
amx_status = {}
for flag in amx_flags:
has_flag = flag in cpuinfo
amx_status[flag] = has_flag
status = "✅" if has_flag else "❌"
print(f" {status} {flag.upper()}")
has_amx = all(amx_status.values())
print(f"\n Overall AMX Support: {'✅ YES' if has_amx else '❌ NO'}")
print()
# Check AVX512 support
print("AVX512 Support (required for FP8 MoE):")
avx512_flags = ["avx512f", "avx512_bf16", "avx512_vnni", "avx512_vbmi"]
avx512_status = {}
for flag in avx512_flags:
has_flag = flag in cpuinfo
avx512_status[flag] = has_flag
status = "✅" if has_flag else "❌"
flag_desc = {
"avx512f": "AVX512F (foundation)",
"avx512_bf16": "AVX512_BF16 (BF16 dot product)",
"avx512_vnni": "AVX512_VNNI (VNNI instructions)",
"avx512_vbmi": "AVX512_VBMI (byte permutation)",
}
print(f" {status} {flag_desc.get(flag, flag.upper())}")
has_avx512_full = all(avx512_status.values())
print(f"\n Overall AVX512 Support: {'✅ YES' if has_avx512_full else '❌ NO'}")
if not has_avx512_full and avx512_status["avx512f"]:
missing = [f for f in avx512_flags if not avx512_status[f]]
print(f" ⚠️ Warning: AVX512F detected but missing: {', '.join(missing)}")
print(f" kt-kernel will fall back to AVX2 mode")
print()
# Check AVX2 support
print("AVX2 Support (fallback):")
has_avx2 = "avx2" in cpuinfo
status = "✅" if has_avx2 else "❌"
print(f" {status} AVX2")
print()
# Recommendation
print("=" * 70)
print("Recommendation:")
print("=" * 70)
if has_amx:
print("✅ Your CPU supports AMX - you can use the highest performance mode!")
print(" Build with: -DKTRANSFORMERS_CPU_USE_AMX_AVX512=ON -DKTRANSFORMERS_CPU_USE_AMX=ON")
elif has_avx512_full:
print("✅ Your CPU supports full AVX512 (F/BF16/VNNI/VBMI) - FP8 MoE will work!")
print(" Build with: -DKTRANSFORMERS_CPU_USE_AMX_AVX512=ON")
elif avx512_status.get("avx512f", False):
print("⚠️ Your CPU has AVX512F but missing required extensions.")
print(" FP8 MoE will NOT work. kt-kernel will fall back to AVX2 mode.")
print(" Missing extensions:", ", ".join([f for f in avx512_flags if not avx512_status.get(f, False)]))
elif has_avx2:
print("️ Your CPU supports AVX2 only - basic compatibility mode.")
print(" FP8 MoE will NOT be available, but other features will work.")
else:
print("❌ Your CPU does not support the minimum required instruction set (AVX2).")
print(" kt-kernel may not work on this system.")
print()
if __name__ == "__main__":
main()