Files
project_6_89d52222/ex_engine/probe_moe_symbols.sh

103 lines
2.4 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# probe_moe_symbols.sh — Verify ix_moe_bridge.so has all 5 MoE symbols
#
# Run on real device after build_moe_bridge.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Find the .so
SO_FILE=""
for p in \
"${SCRIPT_DIR}/prebuilt/ix_moe_bridge.so" \
"${SCRIPT_DIR}/ix_moe_bridge.so" \
"$(python3 -c 'import ix_moe_bridge; print(ix_moe_bridge.__file__)' 2>/dev/null || echo '')"; do
if [[ -f "$p" ]]; then
SO_FILE="$p"
break
fi
done
if [[ -z "$SO_FILE" ]]; then
echo "[probe] ERROR: ix_moe_bridge.so not found"
exit 1
fi
echo "[probe] Checking: $SO_FILE"
echo "[probe] Size: $(du -h "$SO_FILE" | cut -f1)"
echo ""
# Required MoE symbols (must be in ixformer::infer namespace)
REQUIRED=(
"topk_softmax"
"moe_compute_token_index_api"
"moe_expand_input"
"moe_w16a16_group_gemm"
"moe_output_reduce_sum"
)
# Required bridge symbols (pybind11 Python bindings)
BRIDGE_REQUIRED=(
"topk_softmax"
"moe_gen_idx"
"moe_expand_input"
"group_gemm"
"moe_combine_result"
"fused_moe_forward"
"silu_and_mul"
"rms_norm"
"linear"
"paged_attention"
"flash_attn_prefill"
)
echo "=== MoE implementation symbols (ixformer::infer) ==="
PASS=0
FAIL=0
ALL_SYMS=$(nm -D "$SO_FILE" 2>/dev/null || nm "$SO_FILE" 2>/dev/null || echo "")
for sym in "${REQUIRED[@]}"; do
count=$(echo "$ALL_SYMS" | grep -c "$sym" || true)
if [[ $count -gt 0 ]]; then
echo " ✓ $sym ($count matches)"
PASS=$((PASS + 1))
else
echo " ✗ $sym — MISSING"
FAIL=$((FAIL + 1))
fi
done
echo ""
echo "=== pybind11 bridge symbols ==="
for sym in "${BRIDGE_REQUIRED[@]}"; do
count=$(echo "$ALL_SYMS" | grep -c "$sym" || true)
if [[ $count -gt 0 ]]; then
echo " ✓ $sym"
else
echo " ✗ $sym — MISSING"
FAIL=$((FAIL + 1))
fi
done
echo ""
echo "=== Python import test ==="
python3 -c "
import sys
sys.path.insert(0, '$(dirname "$SO_FILE")')
try:
import ix_moe_bridge as m
funcs = [f for f in dir(m) if not f.startswith('_')]
print(f' ✓ Import OK, {len(funcs)} functions: {funcs}')
except Exception as e:
print(f' ✗ Import failed: {e}')
" 2>&1
echo ""
if [[ $FAIL -eq 0 ]]; then
echo "[probe] ✓ ALL SYMBOLS PRESENT ($PASS MoE + bridge OK)"
else
echo "[probe] ✗ $FAIL SYMBOLS MISSING"
exit 1
fi