maga_transformer/utils/export_utils.py (19 lines of code) (raw):

import os import torch import numpy as np from typing import Dict # This file helps exporting tensor to file so that they can be loaded from cpp world. # DO NOT REMOVE THIS FILE # method 1: torch.jit.save def export_tensors_to_jit_module(tensor_map: Dict[str, torch.Tensor], file_name: str) -> None: class Container(torch.nn.Module): def __init__(self, values): super().__init__() for key in values: setattr(self, key, values[key].cpu()) container = torch.jit.script(Container(tensor_map).cpu()) container.save(file_name) # method 2: export to numpy dir def export_tensors_to_numpy_dir(tensor_map: Dict[str, torch.Tensor], dir_name: str) -> None: try: os.mkdir(dir_name) except FileExistsError: pass for key in tensor_map: np.save(dir_name + "/" + key + ".npy", tensor_map[key].cpu().numpy()) # use example: # # dump_dir = "maga_transformer/test/model_test/fake_test/testdata/qwen_0.5b" # export_tensors_to_jit_module(self.weight._pytorch_weights, os.path.join(dump_dir, "pytorch_tensors.pt")) # export_tensors_to_numpy_dir(self.weight._pytorch_weights, os.path.join(dump_dir, "pytorch_tensors")) # for i in range(len(self.weight.weights)): # export_tensors_to_jit_module(self.weight.weights[i], os.path.join(dump_dir, f"layer_{i}.pt")) # export_tensors_to_numpy_dir(self.weight.weights[i], os.path.join(dump_dir, f"layer_{i}")) # use exapmle: export from transformers model # from transformers import AutoModelForCausalLM # model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen1.5-0.5B-Chat") # params = {} # for key, p in model.named_parameters(): # params.update({key: p.data}) # export_tensors_to_jit_module(params, "model.pt")