mobilellm推理文件编写测试

看了看,推理文件其实和训练,评估好像是一回事,只是要减少一些过程,禁用一些调用

比如:

1。推理阶段不涉及对模型参数的更新,只进行前向传播。这意味着推理过程中不会进行反向传播和梯度计算,从而节省计算资源。

2。禁用Dropou,既 :随机丢弃:在每次训练迭代(forward pass)中,Dropout按照预定的概率(通常表示为0到1之间的值)随机选择一部分神经元,并将它们的输出设置为0。这意味着这些神经元在这次迭代中不会对网络的输出产生任何影响。(在使用PyTorch时,可以通过调用model.eval()来关闭dropout层)

3。禁用自动梯度计算:在生成文本时,不需要计算梯度,因为这是一个前向传播过程,不涉及权重更新。这有助于提高性能并减少内存使用。

python test.py --train_data_local_path "C:\techxixi_project\AI\MobileLLM-main\basepath\good_sample.jsonl" --input_model_filename "C:\techxixi_project\AI\MobileLLM-main\125M"

咱是先列一下我的初次体验代码,

import os
import torch
import sys

#from transformers import AutoTokenizer
from transformers import AutoModelForCausalLM, LlamaTokenizerFast
from transformers import AutoConfig, AutoTokenizer
from utils.modeling_llama import LlamaForCausalLM

# 模型和分词器的本地路径
model_folder_path = r"C:\techxixi_project\AI\MobileLLM-main\125M"
model_file_name = "pytorch_model.bin"  # 模型文件名

# 构建完整的文件路径
model_path = os.path.join(model_folder_path, model_file_name)

sys.setrecursionlimit(5000)  # 将递归深度限制增加到 5000

# 加载模型
try:
    model = AutoModelForCausalLM.from_pretrained(model_folder_path)
    model.eval()
    print("Model loaded successfully")
    print(f"model_folder_path: {model_folder_path}")
except Exception as e:
    print(f"Failed to load model: {e}")
    print(f"model_folder_path: {model_folder_path}")


#################临时测试################

# 加载分词器
print("开始加载分词器...")
tokenizer=AutoTokenizer.from_pretrained(
    pretrained_model_name_or_path=model_folder_path,
    padding_side="right",
    use_fast=False,
    return_tensors="pt",
	max_length=512,
	truncation=True,
)


# 输入文本(可以是任何您想要生成文本的起始文本)
input_text = "你好,我要怎么称呼你"
print(f"关键词:{input_text}")

##################################
# 检查是否已经有填充标记,如果没有,设置填充标记
if not tokenizer.pad_token:
    # 如果词器已经有结束标记,将其用作填充标记
    tokenizer.pad_token = tokenizer.eos_token
##################################

# 对输入文本进行编码
inputs = tokenizer(input_text, return_tensors="pt", max_length=512, truncation=True, padding="max_length")

# 打印输入信息
print(f"Input text: {input_text}")
print(f"Encoded inputs: {inputs}")

# 生成文本(这里我们生成50个标记作为示例)
with torch.no_grad():
    try:
        outputs = model.generate(**inputs, max_new_tokens=10, num_return_sequences=1)  # 注意:生成长度包括初始输入文本

        #print(f"Generated outputs: {outputs}")
        generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
        print(f"Generated text: {generated_text}")
    except Exception as e:
        # 打印错误信息
        print(f"An error occurred: {e}")

# 解码生成的标记为文本
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)

# 打印生成的文本
#print(generated_text)

出来的结果乱七八糟的,好傻~~

我换个大点的模型再试试吧,125M这个真不行,太失望

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CDialog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值