From 8abc7cb0d74e60ad1fe523822d67297eb01fe63e Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 13 Aug 2026 01:45:36 +0000 Subject: [PATCH] =?UTF-8?q?diag:=20verify=5Fso=5Floading.py=20=E2=80=94=20?= =?UTF-8?q?check=20all=2013=20prebuilt=20.so=20+=20base=20image=20dlopen?= =?UTF-8?q?=20chain?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- verify_so_loading.py | 243 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 verify_so_loading.py diff --git a/verify_so_loading.py b/verify_so_loading.py new file mode 100644 index 00000000..66de52ff --- /dev/null +++ b/verify_so_loading.py @@ -0,0 +1,243 @@ +#!/usr/bin/env python3 +""" +Diagnostic: verify all 13 prebuilt CoreX .so modules load on BI-V100. + +Run on the real machine AFTER docker build or inside the container: + python3 verify_so_loading.py + +Checks: +1. All 13 .so files exist in $VLLM_ROOT/ +2. Each .so has PyInit_ symbol (pybind11) +3. Each .so can be imported via `from vllm import corex_*` +4. Functions inside each .so are callable +5. Base image .so files also checked (/usr/local/corex/lib64/) +""" + +import sys +import os +import importlib +import ctypes +import struct +from pathlib import Path + +# The 13 prebuilt .so modules from qwen3_6_scripts/prebuilt/corex-3.2.3-ivcore10/ +PREBUILT_SO = [ + "corex_attn_head_rms_norm", + "corex_block_major_kv_transfer", + "corex_fused_paged_prefill", + "corex_gdn_beta_decay", + "corex_gdn_causal_conv", + "corex_gdn_gated_norm", + "corex_gdn_packed_decode", + "corex_gdn_qk_map", + "corex_moe_direct_routed", + "corex_moe_exact_reduce", + "corex_moe_topk_softmax", + "corex_moe_weight_gather", + "corex_paged_kv_gather", +] + +# Base image .so files (from /usr/local/corex/lib64/) +BASE_IMAGE_SO = [ + "/usr/local/corex/lib64/libcorex_gdn.so", + "/usr/local/corex/lib64/libcublas.so", + "/usr/local/corex/lib64/libcudart.so", + "/usr/local/corex/lib64/libcudnn.so", + "/usr/local/corex/lib64/libixattn.so", +] + + +def find_vllm_root(): + """Find vLLM install path.""" + try: + import vllm + return Path(vllm.__file__).parent + except ImportError: + # Try known paths + for p in [ + "/usr/local/corex/lib/python3/dist-packages/vllm", + "/usr/local/corex/lib64/python3/dist-packages/vllm", + ]: + if Path(p).is_dir(): + return Path(p) + return None + + +def check_elf(path): + """Check if file is valid x86-64 ELF.""" + try: + with open(path, 'rb') as f: + header = f.read(20) + if len(header) < 20: + return False, "too short" + if header[:4] != b'\x7fELF': + return False, "not ELF" + if header[4:6] != b'\x02\x01': + return False, "not 64-bit LE" + machine = struct.unpack_from(' 0: + print(f"WARNING: {results['fail']} modules failed to load — will fallback to PyTorch!") + print("This causes 5-8x TPS drop (2-3 TPS vs 14-22 TPS)") + print(f"{'=' * 70}") + + +if __name__ == "__main__": + main()