fusion-llm-demo / tests /test_inference_basic.py
zhan1206
fix: 修复所有测试警告 + 清理调试脚本
4718d7f
Raw
History Blame Contribute Delete
2.89 kB
"""
快速推理测试 - 验证 Fusion-LLM 基本推理功能(无 emoji 版本)
"""
import sys
import torch
sys.path.insert(0, '.')
from models.fusion_mini import FusionMini, FusionMiniConfig
def test_basic_inference():
"""测试基本推理功能"""
print("[TEST] 开始基本推理测试...")
print()
# 1. 创建配置(小配置,快速测试)
print("[1] 创建模型配置...")
config = FusionMiniConfig(
vocab_size=1000,
hidden_size=64,
num_hidden_layers=1,
num_attention_heads=2,
intermediate_size=128,
max_position_embeddings=128,
)
print(f" 词汇表大小: {config.vocab_size}")
print(f" 隐藏层大小: {config.hidden_size}")
print(f" 层数: {config.num_hidden_layers}")
print()
# 2. 创建模型
print("[2] 创建模型...")
model = FusionMini(config)
model.eval() # 评估模式
param_count = sum(p.numel() for p in model.parameters()) / 1e3
print(f" 参数量: {param_count:.1f}K")
print(" 模型创建成功")
print()
# 3. 测试前向传播(无标签)
print("[3] 测试前向传播(无标签)...")
input_ids = torch.randint(0, config.vocab_size, (1, 16))
with torch.no_grad():
outputs = model(input_ids=input_ids)
print(f" 输出类型: {type(outputs)}")
if isinstance(outputs, dict):
for key, value in outputs.items():
if isinstance(value, torch.Tensor):
print(f" {key}: {value.shape}")
print(" 前向传播成功")
print()
# 4. 测试前向传播(有标签,计算损失)
print("[4] 测试前向传播(有标签)...")
labels = torch.randint(0, config.vocab_size, (1, 16))
with torch.no_grad():
outputs = model(input_ids=input_ids, labels=labels)
print(f" Loss: {outputs['loss'].item():.4f}")
print(" 损失计算成功")
print()
# 5. 测试生成(少量 token)
print("[5] 测试生成(5 个 token)...")
with torch.no_grad():
generated = model.generate(
input_ids=input_ids[:, :4],
max_new_tokens=5,
temperature=1.0,
do_sample=False, # 贪婪解码,确定性
)
print(f" 生成形状: {generated.shape}")
print(" 生成成功")
print()
print("[TEST] 基本推理测试通过")
# test passes if no exception
if __name__ == "__main__":
print("=" * 60)
print("Fusion-LLM 基本推理测试")
print("=" * 60)
print()
try:
success = test_basic_inference()
if success:
print()
print("[PASS] 测试通过")
except Exception as e:
print()
print(f"[FAIL] 测试出错: {e}")
import traceback
traceback.print_exc()
sys.exit(1)
sys.exit(0)