diff --git a/qwen3_6_scripts/probe_all_symbols.sh b/qwen3_6_scripts/probe_all_symbols.sh new file mode 100755 index 00000000..5c03e6f7 --- /dev/null +++ b/qwen3_6_scripts/probe_all_symbols.sh @@ -0,0 +1,120 @@ +#!/bin/bash +# probe_all_symbols.sh — Dump ALL exported symbols from every relevant .so +# No grep filter — save full lists, then we search offline + +OUTDIR="cat_files/symbol_dumps" +mkdir -p "$OUTDIR" + +echo "=== 1. ALL ixformer .so files ===" +find /usr/local/corex -name "*ixformer*" -name "*.so" 2>/dev/null | sort | tee "$OUTDIR/ixformer_so_list.txt" +echo "" + +echo "=== 2. Dump each ixformer .so symbols ===" +while read so; do + base=$(basename "$so" | sed 's/[^a-zA-Z0-9._-]/_/g') + count=$(nm -D "$so" 2>/dev/null | grep " T " | wc -l) + echo " $so → $base ($count T symbols)" + nm -D "$so" 2>/dev/null | grep " T " > "$OUTDIR/sym_${base}.txt" +done < "$OUTDIR/ixformer_so_list.txt" +echo "" + +echo "=== 3. libixformer.so full T symbols ===" +if [ -f /usr/local/corex/lib64/libixformer.so ]; then + nm -D /usr/local/corex/lib64/libixformer.so 2>/dev/null | grep " T " > "$OUTDIR/sym_libixformer.txt" + wc -l "$OUTDIR/sym_libixformer.txt" + # Also search for ANY moe/expert/gemm/fused related + echo " grep moe/expert/gemm/fused/group/batch:" + grep -i "moe\|expert\|gemm\|fused\|group\|batch\|topk\|gating\|route" "$OUTDIR/sym_libixformer.txt" | head -30 +fi +echo "" + +echo "=== 4. libcuinfer.so full T symbols ===" +if [ -f /usr/local/corex/lib64/libcuinfer.so ]; then + nm -D /usr/local/corex/lib64/libcuinfer.so 2>/dev/null | grep " T " > "$OUTDIR/sym_libcuinfer.txt" + wc -l "$OUTDIR/sym_libcuinfer.txt" + echo " grep moe/expert/gemm/fused/group/batch:" + grep -i "moe\|expert\|gemm\|fused\|group\|batch\|topk\|gating\|route" "$OUTDIR/sym_libcuinfer.txt" | head -30 +fi +echo "" + +echo "=== 5. _ixformer_torch .so full T symbols ===" +TORCH_SO=$(find /usr/local/corex -name "_ixformer_torch*.so" 2>/dev/null | head -1) +if [ -n "$TORCH_SO" ]; then + nm -D "$TORCH_SO" 2>/dev/null | grep " T " > "$OUTDIR/sym_ixformer_torch.txt" + wc -l "$OUTDIR/sym_ixformer_torch.txt" + echo " grep moe/expert/gemm/fused/group/batch:" + grep -i "moe\|expert\|gemm\|fused\|group\|batch\|topk\|gating\|route" "$OUTDIR/sym_ixformer_torch.txt" | head -30 +fi +echo "" + +echo "=== 6. _C .so (ixformer python binding) full T symbols ===" +C_SO=$(find /usr/local/corex -path "*ixformer*" -name "_C*.so" 2>/dev/null | head -1) +if [ -n "$C_SO" ]; then + nm -D "$C_SO" 2>/dev/null | grep " T " > "$OUTDIR/sym_ixformer_C.txt" + wc -l "$OUTDIR/sym_ixformer_C.txt" + echo " grep moe/expert/gemm/fused/group/batch:" + grep -i "moe\|expert\|gemm\|fused\|group\|batch\|topk\|gating\|route" "$OUTDIR/sym_ixformer_C.txt" | head -30 +fi +echo "" + +echo "=== 7. ALL .so in ixformer package dir ===" +IXDIR=$(python3 -c "import ixformer, os; print(os.path.dirname(ixformer.__file__))" 2>/dev/null) +if [ -n "$IXDIR" ]; then + echo "ixformer dir: $IXDIR" + find "$IXDIR" -name "*.so" | while read so; do + base=$(basename "$so") + count=$(nm -D "$so" 2>/dev/null | grep " T " | wc -l) + echo " $base: $count T symbols" + nm -D "$so" 2>/dev/null | grep " T " > "$OUTDIR/sym_ixpkg_${base}.txt" + # Quick search + hits=$(grep -ic "moe\|expert\|gemm\|fused\|group\|batch\|topk" "$OUTDIR/sym_ixpkg_${base}.txt") + if [ "$hits" -gt 0 ]; then + echo " *** HIT: $hits MoE/GEMM related symbols:" + grep -i "moe\|expert\|gemm\|fused\|group\|batch\|topk" "$OUTDIR/sym_ixpkg_${base}.txt" + fi + done +fi +echo "" + +echo "=== 8. ixformer Python API — list ALL callable functions ===" +python3 << 'PY' +import ixformer +import inspect + +# List all attributes +for name in sorted(dir(ixformer)): + if name.startswith('_'): + continue + obj = getattr(ixformer, name) + if callable(obj): + try: + sig = inspect.signature(obj) + print(f" ixformer.{name}{sig}") + except (ValueError, TypeError): + print(f" ixformer.{name} (no signature)") + elif hasattr(obj, '__module__'): + print(f" ixformer.{name} = {type(obj).__name__}") + +# Check submodules +print("\n --- submodules ---") +for name in sorted(dir(ixformer)): + obj = getattr(ixformer, name) + if inspect.ismodule(obj) and not name.startswith('_'): + print(f" ixformer.{name}:") + for sub in sorted(dir(obj)): + if sub.startswith('_'): + continue + subobj = getattr(obj, sub) + if callable(subobj): + try: + sig = inspect.signature(subobj) + print(f" .{sub}{sig}") + except: + print(f" .{sub} (no sig)") +PY + +echo "" +echo "=== Files saved to $OUTDIR ===" +ls -lh "$OUTDIR/" +echo "" +echo "git add cat_files/symbol_dumps/ && git commit -m 'data: full symbol dumps' && git push"