NexusCoder / scripts /evaluate.py
AdminReal's picture
Import NexusCoder from github.com/mhieuhonda/NexusCoder
eca5751 verified
Raw
History Blame Contribute Delete
2.75 kB
"""
Script đánh giá model trên benchmarks
======================================
Usage:
python scripts/evaluate.py --model model.pt --benchmarks humaneval,gsm8k
python scripts/evaluate.py --model model.pt --benchmarks all --sample-size 100
"""
import sys
import os
import argparse
import json
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import torch
from nexus.config import get_config_by_name
from nexus.model.nexus_coder import NexusCoderForCausalLM
from nexus.tokenizer.tokenizer import NexusTokenizer
from nexus.eval.benchmarks import BenchmarkSuite
from nexus.eval.metrics import compute_perplexity
def main():
parser = argparse.ArgumentParser(description="Nexus Coder Evaluator")
parser.add_argument("--model", type=str, required=True, help="Path to model checkpoint")
parser.add_argument("--config", type=str, default="large", help="Model config")
parser.add_argument(
"--benchmarks",
type=str,
default="humaneval",
help="Comma-separated benchmark names",
)
parser.add_argument("--sample-size", type=int, default=None, help="Limit examples per benchmark")
parser.add_argument("--output", type=str, default="./eval_results.json", help="Output file")
args = parser.parse_args()
print("=" * 60)
print(" NEXUS CODER v0.2 - EVALUATION")
print("=" * 60)
# Load model
config = get_config_by_name(args.config)
model = NexusCoderForCausalLM(config)
if os.path.exists(args.model):
checkpoint = torch.load(args.model, map_location="cpu", weights_only=False)
if "model_state_dict" in checkpoint:
model.load_state_dict(checkpoint["model_state_dict"])
else:
model.load_state_dict(checkpoint)
print(f"✓ Loaded model from {args.model}")
else:
print(f"⚠️ Model file not found, using random init: {args.model}")
# Tokenizer
tokenizer = NexusTokenizer()
# Benchmarks
benchmarks = args.benchmarks.split(",") if args.benchmarks != "all" else None
suite = BenchmarkSuite()
print(f"\n📋 Available benchmarks: {len(suite.list_available())}")
for b in suite.list_available():
print(f" - {b.name}: {b.description}")
print(f"\n🏃 Running benchmarks: {benchmarks or 'all'}")
results = suite.run(model, tokenizer, benchmarks=benchmarks, sample_size=args.sample_size)
# Save results
with open(args.output, "w", encoding="utf-8") as f:
json.dump(results, f, indent=2, ensure_ascii=False, default=str)
print(f"\n📊 Results:")
print(suite.summary())
print(f"\n💾 Saved to: {args.output}")
if __name__ == "__main__":
main()