test: probe_model_shapes.sh — 真机验证模型config和MoE权重shape

This commit is contained in:
Claude
2026-08-15 15:05:26 +00:00
parent ea2c15f699
commit 8eabbac857

48
probe_model_shapes.sh Executable file
View File

@@ -0,0 +1,48 @@
#!/bin/bash
set -e
echo "=== 模型权重实际shape ==="
python3 -c "
import torch, os, json
# 读config.json
cfg_path = '/model/config.json'
if os.path.exists(cfg_path):
with open(cfg_path) as f:
cfg = json.load(f)
print('Model config:')
for k in ['hidden_size', 'intermediate_size', 'num_attention_heads',
'num_key_value_heads', 'num_hidden_layers', 'num_experts',
'num_experts_per_tok', 'moe_intermediate_size', 'vocab_size',
'max_position_embeddings']:
print(f' {k}: {cfg.get(k, \"N/A\")}')
else:
print(f'{cfg_path} not found')
# 搜索
import glob
for p in glob.glob('/model/**/config.json', recursive=True):
print(f' found: {p}')
"
echo ""
echo "=== safetensor权重shape第一个shard==="
python3 -c "
from safetensors import safe_open
import glob, os
shards = sorted(glob.glob('/model/model*.safetensors'))
if not shards:
shards = sorted(glob.glob('/model/*.safetensors'))
if shards:
print(f'Found {len(shards)} shards, reading first: {shards[0]}')
with safe_open(shards[0], framework='pt') as f:
for key in sorted(f.keys()):
if 'experts' in key and ('w1' in key or 'w2' in key or 'w13' in key):
print(f' {key}: {f.get_tensor(key).shape}')
break # 只看一个就够了
# 也看gate
for key in sorted(f.keys()):
if 'gate' in key and 'weight' in key:
print(f' {key}: {f.get_tensor(key).shape}')
break
else:
print('No safetensor shards found')
" 2>&1 || echo "safetensors not available"