Spaces:
Paused
Paused
| import sys | |
| import os | |
| import torch | |
| import argparse | |
| from train_glm5 import GLM5Config, GLM5ForCausalLM | |
| # Allow unpickling checkpoints saved when train_glm5 was run as __main__ | |
| sys.modules["__main__"].GLM5Config = GLM5Config | |
| def export_inference_model(out_dir="out_glm5", input_ckpt="ckpt_best.pt", output_ckpt="model_inference.pt"): | |
| """ | |
| Extracts only model weights and configuration from a training checkpoint, | |
| stripping away optimizer states and iteration metadata to create a lightweight | |
| file for production deployment. | |
| """ | |
| in_path = os.path.join(out_dir, input_ckpt) | |
| if not os.path.exists(in_path): | |
| in_path = os.path.join(out_dir, "ckpt.pt") | |
| if not os.path.exists(in_path): | |
| raise FileNotFoundError(f"No checkpoint found in {out_dir} (checked {input_ckpt} and ckpt.pt)") | |
| out_path = os.path.join(out_dir, output_ckpt) | |
| print(f"Loading checkpoint from: {in_path}...") | |
| checkpoint = torch.load(in_path, map_location="cpu", weights_only=False) | |
| inference_dict = { | |
| "model": checkpoint["model"], | |
| "config": checkpoint["config"], | |
| } | |
| torch.save(inference_dict, out_path) | |
| in_size_mb = os.path.getsize(in_path) / (1024 * 1024) | |
| out_size_mb = os.path.getsize(out_path) / (1024 * 1024) | |
| print(f"Success! Stripped checkpoint exported to: {out_path}") | |
| print(f"Original size: {in_size_mb:.2f} MB") | |
| print(f"Exported size: {out_size_mb:.2f} MB (Saved {in_size_mb - out_size_mb:.2f} MB)") | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser(description="Export inference-only model checkpoint") | |
| parser.add_argument("--out_dir", type=str, default="out_glm5", help="Output directory") | |
| parser.add_argument("--input_ckpt", type=str, default="ckpt_best.pt", help="Input checkpoint filename") | |
| parser.add_argument("--output_ckpt", type=str, default="model_inference.pt", help="Output lightweight checkpoint filename") | |
| args = parser.parse_args() | |
| export_inference_model(args.out_dir, args.input_ckpt, args.output_ckpt) | |