|
|
|
|
@@ -1,157 +0,0 @@
|
|
|
|
|
#!/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"
|