From 93353a14149d94825cd718899f1b6db93efcf05a Mon Sep 17 00:00:00 2001 From: claude Date: Fri, 14 Aug 2026 11:40:13 +0000 Subject: [PATCH] test: probe ixformer .so symbols for MoE grouped GEMM CUTLASS grouped GEMM (example 24) requires SM80 Tensor Core + cuda/std headers. Cannot compile on corex (same issue as CCCL 3.6 variadic functions). Alternative path: ix_moe_bridge.so calls ixformer::infer::moe_w16a16_group_gemm which is BI-V100 optimized grouped GEMM already in the base image. This probe script checks if the MoE functions exist in ixformer .so before attempting to build ix_moe_bridge.so. Run: bash qwen3_6_scripts/probe_ixformer_symbols.sh --- qwen3_6_scripts/probe_ixformer_symbols.sh | 58 +++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 qwen3_6_scripts/probe_ixformer_symbols.sh diff --git a/qwen3_6_scripts/probe_ixformer_symbols.sh b/qwen3_6_scripts/probe_ixformer_symbols.sh new file mode 100644 index 00000000..fb2a0773 --- /dev/null +++ b/qwen3_6_scripts/probe_ixformer_symbols.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# probe_ixformer_symbols.sh — Check what ixformer::infer functions are available +# Run: bash qwen3_6_scripts/probe_ixformer_symbols.sh + +echo "=== Locate ixformer .so ===" +python3 -c " +import ixformer, os, glob +d = os.path.dirname(ixformer.__file__) +print(f'ixformer dir: {d}') +for f in glob.glob(os.path.join(d, '*.so')): + print(f' {os.path.basename(f)} ({os.path.getsize(f)} bytes)') +" 2>/dev/null + +IXFORMER_SO=$(python3 -c " +import ixformer, os, glob +d = os.path.dirname(ixformer.__file__) +sos = glob.glob(os.path.join(d, '*ixformer*.so')) +print(sos[0] if sos else '') +" 2>/dev/null) + +if [ -z "$IXFORMER_SO" ]; then + echo "ixformer .so not found" + exit 1 +fi + +echo "" +echo "=== MoE functions (grouped GEMM pipeline) ===" +nm -D "$IXFORMER_SO" 2>/dev/null | grep -i "moe_w16a16\|group_gemm\|moe_expand\|moe_compute_token\|moe_output_reduce\|topk_softmax" | head -20 + +echo "" +echo "=== Attention functions ===" +nm -D "$IXFORMER_SO" 2>/dev/null | grep -i "flash_attn_unpad\|paged_attention\|xllm_paged" | head -10 + +echo "" +echo "=== Linear functions ===" +nm -D "$IXFORMER_SO" 2>/dev/null | grep -i "ixformer_linear\|residual_rms_norm" | head -10 + +echo "" +echo "=== All ixformer::infer symbols ===" +nm -D "$IXFORMER_SO" 2>/dev/null | grep "ixformer.*infer\|ixinfer" | wc -l +echo "total symbols" + +echo "" +echo "=== Also check _ixformer_torch .so ===" +find /usr/local/corex -name "*ixformer*torch*.so" 2>/dev/null | head -5 +TORCH_SO=$(find /usr/local/corex -name "*ixformer*torch*.so" 2>/dev/null | head -1) +if [ -n "$TORCH_SO" ]; then + echo "MoE symbols in torch ext:" + nm -D "$TORCH_SO" 2>/dev/null | grep -i "moe_w16a16\|group_gemm\|topk_softmax\|moe_expand\|moe_compute" | head -20 +fi + +echo "" +echo "=== corex lib64 ixformer ===" +ls /usr/local/corex/lib64/libixformer* 2>/dev/null +if [ -f /usr/local/corex/lib64/libixformer.so ]; then + echo "MoE symbols in libixformer.so:" + nm -D /usr/local/corex/lib64/libixformer.so 2>/dev/null | grep -i "moe_w16a16\|group_gemm\|topk_softmax" | head -20 +fi