test: probe_real_machine.sh — cat ixformer/vllm/cublas真机数据

This commit is contained in:
Claude
2026-08-15 14:28:10 +00:00
parent 6415249693
commit a823bdf9ea

137
probe_real_machine.sh Executable file
View File

@@ -0,0 +1,137 @@
#!/bin/bash
# probe_real_machine.sh — 在真机上执行cat所有关键数据
# 用法: bash probe_real_machine.sh | tee probe_output.txt
set -e
echo "========================================"
echo " probe_real_machine.sh"
echo " $(date)"
echo "========================================"
echo ""
echo "=== 1. ixformer Python包结构 ==="
python3 -c "
import ixformer
print('ixformer.__file__:', ixformer.__file__)
print('dir(ixformer):', [x for x in dir(ixformer) if not x.startswith('__')])
" 2>&1 || echo "FAIL: import ixformer"
echo ""
echo "=== 2. ixformer.functions ==="
python3 -c "
try:
import ixformer.functions as F
print('dir(ixformer.functions):', [x for x in dir(F) if not x.startswith('__')])
except Exception as e:
print('FAIL:', e)
" 2>&1
echo ""
echo "=== 3. ixformer._C ==="
python3 -c "
try:
import ixformer._C as C
print('dir(ixformer._C):', [x for x in dir(C) if not x.startswith('__')])
except Exception as e:
print('FAIL:', e)
" 2>&1
echo ""
echo "=== 4. 找topk_softmax在哪 ==="
python3 -c "
import ixformer
import os, importlib, pkgutil
root = os.path.dirname(ixformer.__file__)
for loader, name, ispkg in pkgutil.walk_packages([root], prefix='ixformer.'):
try:
mod = importlib.import_module(name)
attrs = [a for a in dir(mod) if 'topk' in a.lower() or 'softmax' in a.lower()]
if attrs:
print(f'{name}: {attrs}')
except:
pass
" 2>&1 || echo "walk failed"
echo ""
echo "=== 5. grep topk in ixformer ==="
IXDIR=$(python3 -c "import ixformer; import os; print(os.path.dirname(ixformer.__file__))" 2>/dev/null)
if [ -n "$IXDIR" ]; then
echo "ixformer dir: $IXDIR"
grep -r "topk_softmax\|topk_soft\|moe_topk" "$IXDIR" --include="*.py" -l 2>/dev/null | head -10
echo "---"
grep -r "topk_softmax\|topk_soft\|moe_topk" "$IXDIR" --include="*.py" 2>/dev/null | head -20
fi
echo ""
echo "=== 6. base镜像 _custom_ops.py topk调用 ==="
VLLMDIR=$(python3 -c "import vllm; import os; print(os.path.dirname(vllm.__file__))" 2>/dev/null)
if [ -n "$VLLMDIR" ]; then
echo "vllm dir: $VLLMDIR"
grep -n "topk_softmax\|topk_soft" "$VLLMDIR/_custom_ops.py" 2>/dev/null | head -10
echo "---"
# cat完整的topk_softmax函数
sed -n '/def topk_softmax/,/^def /p' "$VLLMDIR/_custom_ops.py" 2>/dev/null | head -30
fi
echo ""
echo "=== 7. base镜像的fused_moe调用 ==="
if [ -n "$VLLMDIR" ]; then
grep -rn "topk_softmax\|FusedMoE\|fused_moe" "$VLLMDIR/model_executor/layers/fused_moe/" --include="*.py" 2>/dev/null | grep -v __pycache__ | head -20
fi
echo ""
echo "=== 8. .so文件在base镜像里的位置 ==="
find /usr/local/corex/lib/python3/dist-packages -name "*.so" -path "*/ixformer/*" 2>/dev/null | head -20
find /usr/local/corex/lib/python3/dist-packages -name "*.so" -path "*/vllm/*" 2>/dev/null | head -20
echo ""
echo "=== 9. libixinfer / libixattn ==="
find /usr/local/corex -name "libixinfer*" -o -name "libixattn*" -o -name "libixformer*" 2>/dev/null | head -10
ls -la /usr/local/corex/lib64/libix* 2>/dev/null | head -10
echo ""
echo "=== 10. torch CUDA能力 ==="
python3 -c "
import torch
print('torch.cuda.is_available():', torch.cuda.is_available())
print('torch.version.cuda:', torch.version.cuda)
if torch.cuda.is_available():
print('device:', torch.cuda.get_device_name(0))
print('capability:', torch.cuda.get_device_capability(0))
" 2>&1
echo ""
echo "=== 11. cublas batched gemm验证 ==="
python3 -c "
import torch
torch.cuda.set_device(0)
E, T, H, I = 8, 1, 4096, 11264
w = torch.randn(E, 2*I, H, device='cuda', dtype=torch.float16)
x = torch.randn(E, T, H, device='cuda', dtype=torch.float16)
# 方法1: torch.bmm (cublas batchedGemm)
import time
torch.cuda.synchronize()
t0 = time.perf_counter()
for _ in range(10):
out = torch.bmm(x, w.transpose(1,2))
torch.cuda.synchronize()
t1 = time.perf_counter()
print(f'torch.bmm: {(t1-t0)/10*1000:.3f} ms, shape: {out.shape}')
# 方法2: 循环F.linear
t0 = time.perf_counter()
for _ in range(10):
outs = []
for e in range(E):
outs.append(x[e] @ w[e].transpose(0,1))
out2 = torch.stack(outs)
torch.cuda.synchronize()
t1 = time.perf_counter()
print(f'loop matmul: {(t1-t0)/10*1000:.3f} ms, shape: {out2.shape}')
" 2>&1
echo ""
echo "========================================"
echo " probe complete"
echo "========================================"