#!/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()