| import argparse |
| import os |
| from pathlib import Path |
|
|
| import torch |
| from omegaconf import OmegaConf |
|
|
| from apps.plm.transformer import LMTransformer, LMTransformerArgs |
| from core.args import dataclass_from_dict |
| from core.checkpoint import load_from_checkpoint |
|
|
|
|
| def build_model( |
| ref_model_path: str, |
| model_cls=LMTransformer, |
| model_args_cls=LMTransformerArgs, |
| ): |
| ckpt_path = Path(ref_model_path) |
| config = ckpt_path / "params.json" |
| config = OmegaConf.load(config) |
|
|
| model_args = dataclass_from_dict(model_args_cls, config.model, strict=False) |
| model = model_cls(model_args) |
| return model |
|
|
|
|
| def main(): |
| parser = argparse.ArgumentParser(description="Consolidate PLM checkpoints") |
| parser.add_argument( |
| "--ckpt", |
| type=str, |
| required=True, |
| help="Path to the checkpoint directory to consolidate", |
| ) |
| args = parser.parse_args() |
|
|
| model = build_model(ref_model_path=args.ckpt) |
| load_from_checkpoint( |
| ckpt_dir=args.ckpt, |
| model=model, |
| optimizer=None, |
| model_key="model", |
| ) |
|
|
| consolidated_model_state_dict = model.state_dict() |
| output_file = os.path.join(args.ckpt, "consolidated.pth") |
|
|
| |
| print(f"Saving consolidated model state_dict to: {output_file}") |
| torch.save(consolidated_model_state_dict, output_file) |
| print("Consolidated checkpoint saved successfully.") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|