|
|
|
|
| import sys
|
| import numpy as np
|
| from pathlib import Path
|
| import os
|
|
|
|
|
| sys.path.insert(0, str(Path(__file__).parent.parent / "utils"))
|
| from common import get_model_name_from_env_path, compare_tokens, exit_with_warning
|
|
|
| def quick_logits_check(pytorch_file, llamacpp_file):
|
| """Lightweight sanity check before NMSE"""
|
|
|
| try:
|
| pytorch_logits = np.fromfile(pytorch_file, dtype=np.float32)
|
| llamacpp_logits = np.fromfile(llamacpp_file, dtype=np.float32)
|
| except Exception as e:
|
| print(f"β NOK: Failed to load files - {e}")
|
| return False
|
|
|
|
|
| if pytorch_logits.shape != llamacpp_logits.shape:
|
| print(f"β NOK: Shape mismatch - PyTorch: {pytorch_logits.shape}, llama.cpp: {llamacpp_logits.shape}")
|
| return False
|
|
|
|
|
| diff = pytorch_logits - llamacpp_logits
|
| abs_diff = np.abs(diff)
|
| max_diff = np.max(abs_diff)
|
|
|
|
|
| pytorch_top10 = np.argsort(pytorch_logits)[-10:][::-1]
|
| llamacpp_top10 = np.argsort(llamacpp_logits)[-10:][::-1]
|
| print(f"Top 10 PyTorch logits: {pytorch_logits[pytorch_top10]}")
|
| print(f"Top 10 llama.cpp logits: {llamacpp_logits[llamacpp_top10]}")
|
| print(f"Max absolute difference: {max_diff:.4f}")
|
|
|
| return True
|
|
|
| def main():
|
| model_path = os.environ.get('MODEL_PATH')
|
| model_name = get_model_name_from_env_path('MODEL_PATH')
|
| data_dir = Path("data")
|
| pytorch_file = data_dir / f"pytorch-{model_name}.bin"
|
|
|
| llamacpp_model_name = get_model_name_from_env_path('CONVERTED_MODEL')
|
| print(f"Using converted model: {llamacpp_model_name}")
|
| llamacpp_file = data_dir / f"llamacpp-{llamacpp_model_name}.bin"
|
|
|
| if not pytorch_file.exists():
|
| print(f"Error: PyTorch logits file not found: {pytorch_file}")
|
| print("Please run scripts/run-org-model.sh first to generate this file.")
|
| sys.exit(1)
|
|
|
| if not llamacpp_file.exists():
|
| print(f"Error: llama.cpp logits file not found: {llamacpp_file}")
|
| print("Please run scripts/run-converted-model.sh first to generate this file.")
|
| sys.exit(1)
|
|
|
| print("Checked all required files were found. Proceeding...\n")
|
|
|
|
|
| print("π Token Comparison Check")
|
| print("=" * 40)
|
| if not compare_tokens(f"pytorch-{model_name}", f"llamacpp-{llamacpp_model_name}"):
|
| exit_with_warning("\nβ Token mismatch detected", model_path)
|
| print()
|
|
|
| print("π GGML Model Validation for model ", model_name)
|
| print("=" * 40)
|
| print(f"PyTorch logits : {pytorch_file}")
|
| print(f"llama.cpp logits: {llamacpp_file}")
|
| print()
|
|
|
| success = quick_logits_check(pytorch_file, llamacpp_file)
|
|
|
|
|
| if success:
|
| print("β
OK: Lightweight model check successful!")
|
| print(" Ok to proceed with NMSE check...")
|
| sys.exit(0)
|
| else:
|
| exit_with_warning(f"β NOK: Top 10 predictions don't match - generation will differ", model_path)
|
|
|
| if __name__ == "__main__":
|
| main()
|
|
|