test: probe_model_shapes.sh — 真机验证模型config和MoE权重shape
This commit is contained in:
48
probe_model_shapes.sh
Executable file
48
probe_model_shapes.sh
Executable 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"
|
||||
Reference in New Issue
Block a user