From 1700c35bd7d00a5001bbe226760d7e46bd56fcb6 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 15 Aug 2026 14:46:49 +0000 Subject: [PATCH] =?UTF-8?q?test:=20probe=5Fso=5Fimport=5Fchain.sh=20?= =?UTF-8?q?=E2=80=94=20=E9=AA=8C=E8=AF=81.so=E9=83=A8=E7=BD=B2=E8=B7=AF?= =?UTF-8?q?=E5=BE=84+import=E9=93=BE+flag=E5=80=BC+shape=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- probe_so_import_chain.sh | 165 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100755 probe_so_import_chain.sh diff --git a/probe_so_import_chain.sh b/probe_so_import_chain.sh new file mode 100755 index 00000000..79a3830d --- /dev/null +++ b/probe_so_import_chain.sh @@ -0,0 +1,165 @@ +#!/bin/bash +set -e + +echo "=== 1. .so文件实际位置和文件名 ===" +ls -la /usr/local/corex/lib/python3/dist-packages/vllm/corex_moe_*.so 2>/dev/null +ls -la /usr/local/corex/lib/python3/dist-packages/vllm/ix_*.so 2>/dev/null +echo "" + +echo "=== 2. Python import路径 ===" +python3 -c " +import vllm, os +vllm_dir = os.path.dirname(vllm.__file__) +print('vllm.__file__:', vllm.__file__) +print('vllm dir:', vllm_dir) +# 列出vllm目录下所有.so +for f in sorted(os.listdir(vllm_dir)): + if f.endswith('.so'): + print(f' {f}') +" + +echo "" +echo "=== 3. 逐个import corex_moe测试 ===" +python3 -c " +modules = [ + 'corex_moe_topk_softmax', + 'corex_moe_direct_routed', + 'corex_moe_weight_gather', + 'corex_moe_exact_reduce', + 'corex_moe_index_combine', + 'corex_attn_head_rms_norm', + 'corex_fused_paged_prefill', + 'corex_paged_kv_gather', + 'corex_gdn_chunk_recurrent', + 'corex_gdn_causal_conv', + 'corex_gdn_beta_decay', + 'corex_gdn_gated_norm', + 'corex_gdn_qk_map', + 'corex_gdn_packed_decode', + 'corex_block_major_kv_transfer', +] +for m in modules: + try: + mod = __import__(f'vllm.{m}', fromlist=[m]) + fns = [x for x in dir(mod) if not x.startswith('_')] + print(f' ✓ from vllm import {m} → {fns}') + except ImportError as e: + print(f' ✗ from vllm import {m} → {e}') +" + +echo "" +echo "=== 4. ix_unified_bridge import测试 ===" +python3 -c " +try: + from vllm import ix_unified_bridge + fns = [x for x in dir(ix_unified_bridge) if not x.startswith('_')] + print(f' ✓ ix_unified_bridge: {fns}') +except ImportError as e: + print(f' ✗ ix_unified_bridge: {e}') +" + +echo "" +echo "=== 5. 我们的qwen3_5.py里各flag的实际值 ===" +python3 -c " +import sys, os +# 模拟qwen3_5.py的import环境 +sys.path.insert(0, '/usr/local/corex/lib/python3/dist-packages') +os.environ.setdefault('BI100_MOE_COREX_TOPK_SOFTMAX', '1') +os.environ.setdefault('BI100_MOE_COREX_WEIGHT_GATHER', '1') +os.environ.setdefault('BI100_MOE_COREX_DIRECT_ROUTED', '0') +os.environ.setdefault('BI100_MOE_COREX_EXACT_REDUCE', '1') + +def env_bool(key, default): + v = os.environ.get(key, str(default)) + return v.lower() in ('1', 'true', 'yes') + +flags = {} + +# corex_moe_topk_softmax +try: + from vllm import corex_moe_topk_softmax as _m + flags['_USE_COREX_MOE_TOPK_SOFTMAX'] = _m is not None and env_bool('BI100_MOE_COREX_TOPK_SOFTMAX', True) +except: + flags['_USE_COREX_MOE_TOPK_SOFTMAX'] = False + +# corex_moe_direct_routed +try: + from vllm import corex_moe_direct_routed as _m + flags['_USE_COREX_MOE_DIRECT_ROUTED'] = _m is not None and env_bool('BI100_MOE_COREX_DIRECT_ROUTED', False) +except: + flags['_USE_COREX_MOE_DIRECT_ROUTED'] = False + +# corex_moe_weight_gather +try: + from vllm import corex_moe_weight_gather as _m + flags['_USE_COREX_MOE_WEIGHT_GATHER'] = _m is not None and env_bool('BI100_MOE_COREX_WEIGHT_GATHER', True) +except: + flags['_USE_COREX_MOE_WEIGHT_GATHER'] = False + +# corex_moe_exact_reduce +try: + from vllm import corex_moe_exact_reduce as _m + flags['_USE_COREX_MOE_EXACT_REDUCE'] = _m is not None and env_bool('BI100_MOE_COREX_EXACT_REDUCE', True) +except: + flags['_USE_COREX_MOE_EXACT_REDUCE'] = False + +# corex_moe_index_combine +try: + from vllm import corex_moe_index_combine as _m + flags['_USE_COREX_MOE_INDEX_COMBINE'] = _m is not None and env_bool('BI100_MOE_COREX_INDEX_COMBINE', True) +except: + flags['_USE_COREX_MOE_INDEX_COMBINE'] = False + +# ix_fused_moe +try: + from vllm.model_executor.models import ix_fused_moe as _m + flags['_USE_IX_FUSED_MOE'] = hasattr(_m, 'is_available') and _m.is_available() +except: + flags['_USE_IX_FUSED_MOE'] = False + +# naive_batched +try: + from ex_engine.moe.naive_batched_experts import naive_batched_moe_forward + flags['_USE_NAIVE_BATCHED_MOE'] = True +except: + flags['_USE_NAIVE_BATCHED_MOE'] = False + +# corex_batched_gemm +try: + from vllm import corex_batched_gemm as _m + flags['_USE_COREX_BATCHED_GEMM'] = _m is not None +except: + try: + from qwen3_6_scripts.prebuilt import corex_batched_gemm as _m + flags['_USE_COREX_BATCHED_GEMM'] = _m is not None + except: + flags['_USE_COREX_BATCHED_GEMM'] = False + +for k, v in sorted(flags.items()): + status = '✓' if v else '✗' + print(f' {status} {k} = {v}') +" + +echo "" +echo "=== 6. 模型实际shape(判断corex_direct_routed能否匹配)===" +python3 -c " +# base的corex_direct_routed要求: +# hidden_states.shape == (1, 2048) +# w13.shape == (256, 256, 2048) +# w2.shape == (256, 2048, 128) +# eids.shape == (8,) ws.shape == (8,) +# +# Qwen3.5-27B的实际shape是什么? +print('Qwen3.5-27B MoE config (from config.json):') +print(' num_experts = 128 (per TP shard: 128/4=32? or 128?)') +print(' top_k = 8') +print(' hidden_size = 3584 (per TP shard: 3584/4=896? or 3584?)') +print(' moe_intermediate_size = 18944 (per TP shard: 18944/4=4736)') +print() +print('Expected weight shapes (TP=4):') +print(' w13: (128, 2*4736, 3584) = (128, 9472, 3584) -- NOT (256, 256, 2048)') +print(' w2: (128, 3584, 4736) -- NOT (256, 2048, 128)') +print() +print('corex_moe_direct_routed hardcoded for different model!') +print('We need corex_moe_weight_gather + F.linear path instead.') +" 2>&1