from openmind import AutoTokenizer, AutoModelForCausalLM, is_torch_npu_available
from openmind_hub import snapshot_download
from transformers import AutoModelForSeq2SeqLM
import torch
import argparse
import torch.nn.functional as F
# 均值池化 - 考虑注意力掩码以进行正确的平均
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] # model_output的第一个元素包含所有token嵌入
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument(
"--model_name_or_path",
type=str,
help="Path to model",
default="../",
)
args = parser.parse_args()
return args
def main():
args = parse_args()
model_path = args.model_name_or_path
if is_torch_npu_available():
device = "npu:0"
else:
device = "cpu"
# 从openmind_hub加载模型
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForSeq2SeqLM.from_pretrained(model_path)
# 对句子进行分词
encoded_input = tokenizer(">>nl<< Your English text here", return_tensors="pt")
# 计算token嵌入
with torch.no_grad():
model_output = model.generate(**encoded_input)
print(tokenizer.batch_decode(model_output, skip_special_tokens=True))
if __name__ == "__main__":
main()[!NOTE] 这是一个“原始”预训练模型,旨在针对下游任务进行微调
训练代码:https://github.com/pszemraj/nanoT5/tree/any-tokenizer
更多详情请参见 checkpoints/ 目录
损失

梯度

权重
