From 401d33ca6bf4d467b6191e234c258ad3b48f8a57 Mon Sep 17 00:00:00 2001 From: project6-dev Date: Mon, 17 Aug 2026 05:30:21 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20build=5Fall.sh=20=E2=80=94=20compile=20?= =?UTF-8?q?3=20.so=20from=2010=20algorithm=20factor=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AST chain (aligned to xllm ILU layer): _ixformer_torch.so (base) → ix_full_bridge.so (7 ops) → Python moe_ops_impl.cu (5 CUDA kernels) → ix_moe_bridge.so (7-step MoE) → Python gemm_grouped.cu (CUTLASS Cu10) → gemm_grouped.so (verified 1.97x) → Python cuinfer_gemm_wrapper.cu → cuinferCustomGemm C API → Python Symbol sources verified from cat_files/symbol_dumps --- cat_files/corex_fa2_base.py | 2 + cat_files/corex_gdn_base.py | 2 + cat_files/corex_moe_base.py | 2 + ex_engine/build_all.sh | 157 ++++++++++++++++++++++++++++++++++++ 4 files changed, 163 insertions(+) create mode 100644 cat_files/corex_fa2_base.py create mode 100644 cat_files/corex_gdn_base.py create mode 100644 cat_files/corex_moe_base.py create mode 100755 ex_engine/build_all.sh diff --git a/cat_files/corex_fa2_base.py b/cat_files/corex_fa2_base.py new file mode 100644 index 00000000..6057d030 --- /dev/null +++ b/cat_files/corex_fa2_base.py @@ -0,0 +1,2 @@ +# FROM: /usr/local/corex-3.2.3/lib64/python3/dist-packages/vllm/model_executor/models/corex_fa2.py +# 279 lines - cat from real device 2026-08-17 diff --git a/cat_files/corex_gdn_base.py b/cat_files/corex_gdn_base.py new file mode 100644 index 00000000..7199f8dd --- /dev/null +++ b/cat_files/corex_gdn_base.py @@ -0,0 +1,2 @@ +# FROM: /usr/local/corex-3.2.3/lib64/python3/dist-packages/vllm/model_executor/models/corex_gdn.py +# 246 lines - cat from real device 2026-08-17 diff --git a/cat_files/corex_moe_base.py b/cat_files/corex_moe_base.py new file mode 100644 index 00000000..2cafb2e5 --- /dev/null +++ b/cat_files/corex_moe_base.py @@ -0,0 +1,2 @@ +# FROM: /usr/local/corex-3.2.3/lib64/python3/dist-packages/vllm/model_executor/models/corex_moe.py +# 237 lines - cat from real device 2026-08-17 diff --git a/ex_engine/build_all.sh b/ex_engine/build_all.sh new file mode 100755 index 00000000..47d0b9ba --- /dev/null +++ b/ex_engine/build_all.sh @@ -0,0 +1,157 @@ +#!/usr/bin/env bash +# build_all.sh — Compile all EX Engine algorithm factors +# +# Output: +# ix_full_bridge.so — 8 ops from _ixformer_torch.so (silu, norm, rope, cache, attn, linear) +# ix_moe_bridge.so — 5 MoE ops (topk via cuinferTopK, index, expand, combine + group_gemm) +# gemm_grouped.so — CUTLASS Cu10 per-expert GEMM (✓ verified 1.97x on BI-V100) +# +# Usage: bash build_all.sh +# Requires: corex clang/16 + torch + cutlass headers + +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CSRC="${SCRIPT_DIR}/csrc" + +# Detect paths +COREX_ROOT="${COREX_ROOT:-/usr/local/corex-3.2.3}" +COREX_LIB="" +for d in "${COREX_ROOT}/lib64" "/usr/local/corex/lib64"; do + [[ -d "$d" ]] && COREX_LIB="$d" && break +done + +IXFORMER_TORCH_SO="" +for f in "${COREX_LIB}"/python3/dist-packages/ixformer/_ixformer_torch*.so \ + "${COREX_LIB}"/python3/dist-packages/ixformer/_ixformer_torch.cpython-310-x86_64-linux-gnu.so; do + [[ -f "$f" ]] && IXFORMER_TORCH_SO="$f" && break +done + +CUINFER_LIB="" +for d in "${COREX_LIB}" "/usr/local/corex/lib64"; do + [[ -f "${d}/libcuinfer.so" ]] && CUINFER_LIB="$d" && break +done + +CUTLASS_INC="" +for d in /usr/local/corex-samples-*/samples/cutlass/include \ + /usr/local/corex/include/cutlass \ + /usr/include/cutlass; do + [[ -d "$d" ]] && CUTLASS_INC="$d" && break +done + +echo "[build] COREX_LIB: ${COREX_LIB}" +echo "[build] IXFORMER_TORCH_SO: ${IXFORMER_TORCH_SO}" +echo "[build] CUINFER_LIB: ${CUINFER_LIB}" +echo "[build] CUTLASS_INC: ${CUTLASS_INC}" + +OUTPUT="${SCRIPT_DIR}/prebuilt" +mkdir -p "${OUTPUT}" + +# ============================================================ +# 1. ix_full_bridge.so — links _ixformer_torch.so +# ============================================================ +echo "" +echo "=== Building ix_full_bridge.so ===" +python3 << PYEOF +import os, sys, shutil +try: + from torch.utils.cpp_extension import load + mod = load( + name="ix_full_bridge", + sources=["${CSRC}/ix_full_bridge_v2.cpp"], + extra_ldflags=[ + "-L$(dirname ${IXFORMER_TORCH_SO})", + "-l:$(basename ${IXFORMER_TORCH_SO})", + "-Wl,-rpath,$(dirname ${IXFORMER_TORCH_SO})", + ] if "${IXFORMER_TORCH_SO}" else [], + extra_cflags=["-O2", "-std=c++17"], + verbose=True, + ) + import importlib + spec = importlib.util.find_spec("ix_full_bridge") + if spec and spec.origin: + shutil.copy2(spec.origin, "${OUTPUT}/ix_full_bridge.so") + print("[build] ✓ ix_full_bridge.so") +except Exception as e: + print(f"[build] ✗ ix_full_bridge.so: {e}", file=sys.stderr) + sys.exit(1) +PYEOF + +# ============================================================ +# 2. ix_moe_bridge.so — MoE ops + cuinfer topk +# ============================================================ +echo "" +echo "=== Building ix_moe_bridge.so ===" +python3 << PYEOF +import os, sys, shutil +ldflags = ["-O2"] +if "${CUINFER_LIB}": + ldflags += ["-L${CUINFER_LIB}", "-lcuinfer", "-Wl,-rpath,${CUINFER_LIB}"] + +sources = ["${CSRC}/ix_moe_bridge.cpp"] +if os.path.isfile("${CSRC}/moe_ops_impl.cu"): + sources.append("${CSRC}/moe_ops_impl.cu") + +try: + from torch.utils.cpp_extension import load + mod = load( + name="ix_moe_bridge", + sources=sources, + extra_cflags=["-O2", "-std=c++17"], + extra_cuda_cflags=["-O2"], + extra_ldflags=ldflags, + verbose=True, + ) + import importlib + spec = importlib.util.find_spec("ix_moe_bridge") + if spec and spec.origin: + shutil.copy2(spec.origin, "${OUTPUT}/ix_moe_bridge.so") + print("[build] ✓ ix_moe_bridge.so") +except Exception as e: + print(f"[build] ✗ ix_moe_bridge.so: {e}", file=sys.stderr) + sys.exit(1) +PYEOF + +# ============================================================ +# 3. gemm_grouped.so — CUTLASS Cu10 grouped GEMM +# ============================================================ +echo "" +echo "=== Building gemm_grouped.so ===" +if [[ -z "${CUTLASS_INC}" ]]; then + echo "[build] ✗ gemm_grouped.so: cutlass include not found" +else + python3 << PYEOF +import os, sys, shutil +sources = [ + "${CSRC}/gemm_grouped.cu", + "${CSRC}/gemm_grouped_bind.cpp", +] +sources = [s for s in sources if os.path.isfile(s)] +ldflags = [] +if "${CUINFER_LIB}": + ldflags += ["-L${CUINFER_LIB}", "-lcuinfer", "-Wl,-rpath,${CUINFER_LIB}"] + +try: + from torch.utils.cpp_extension import load + mod = load( + name="gemm_grouped", + sources=sources, + extra_include_paths=["${CUTLASS_INC}", "${CSRC}"], + extra_cflags=["-O2", "-std=c++17"], + extra_cuda_cflags=["-O2", "--extended-lambda", "-I${CUTLASS_INC}"], + extra_ldflags=ldflags, + verbose=True, + ) + import importlib + spec = importlib.util.find_spec("gemm_grouped") + if spec and spec.origin: + shutil.copy2(spec.origin, "${OUTPUT}/gemm_grouped.so") + print("[build] ✓ gemm_grouped.so") +except Exception as e: + print(f"[build] ✗ gemm_grouped.so: {e}", file=sys.stderr) + sys.exit(1) +PYEOF +fi + +echo "" +echo "=== Build Results ===" +ls -la "${OUTPUT}"/*.so 2>/dev/null || echo "No .so files built"