首页 > 编程问答 >从 pyTorch 中的检查点文件夹加载模型

从 pyTorch 中的检查点文件夹加载模型

时间:2024-07-26 05:14:52浏览次数:13  
标签:python pytorch checkpointing

我正在尝试从某个检查点加载模型并将其用于推理。检查点文件夹如下所示。如何从该文件夹将模型加载到 torch 中。 资源 我可以找到用于从检查点文件加载,而不是文件夹。

enter image description here

import whisper_timestamped as whisper
from transformers import AutoProcessor, WhisperForConditionalGeneration
from peft import prepare_model_for_kbit_training, LoraConfig, PeftModel, LoraModel, LoraConfig, get_peft_model
from peft import PeftModel, PeftConfig
import torch
from datasets import Dataset, Audio
from transformers import AutoFeatureExtractor, WhisperModel

peft_model_id = "aben118/finetuned_model/checkpoint-3900" 

language = "en"
task = "transcribe"
peft_config = PeftConfig.from_pretrained(peft_model_id)
model = WhisperForConditionalGeneration.from_pretrained(
    peft_config.base_model_name_or_path, load_in_8bit=False, device_map="auto"
)
model = PeftModel.from_pretrained(model, peft_model_id)
print(model)
model = model.merge_and_unload()
model.save_pretrained(<model_path>)

但它以 .safetensors 格式保存它。我希望它成为一个可以使用 torch.load 加载的模型。


你几乎完成了! 你的代码的问题在于你正在尝试从 peft 加载一个完整的模型,而不是状态字典。

以下是加载模型的细分,以及如何使用 torch.load 保存它:

import torch
from transformers import WhisperForConditionalGeneration
from peft import PeftModel, PeftConfig

peft_model_id = "aben118/finetuned_model/checkpoint-3900" 

# 加载 peft 配置
peft_config = PeftConfig.from_pretrained(peft_model_id)

# 加载基础 Whisper 模型
model = WhisperForConditionalGeneration.from_pretrained(
    peft_config.base_model_name_or_path, load_in_8bit=False, device_map="auto"
)

# 加载 peft 权重
model = PeftModel.from_pretrained(model, peft_model_id)

# 这是重要的一步:合并 peft 权重以获得完整的模型
model = model.merge_and_unload() 

# 现在你可以像往常一样保存模型
torch.save(model.state_dict(), "<model_path>.pt") 

# 加载模型
loaded_model = WhisperForConditionalGeneration.from_pretrained(peft_config.base_model_name_or_path)
loaded_model.load_state_dict(torch.load("<model_path>.pt"))

解释:

  1. 加载 peft 配置: 这定义了你如何将 peft 应用于你的基础模型。
  2. 加载基础模型: 这是你的 Whisper 模型,没有 peft 调整。
  3. 加载 peft 权重: 这会加载你训练过的 peft 参数。
  4. 合并权重: model.merge_and_unload() 将 peft 权重合并到基础模型中。这会给你一个带有 peft 更新参数的完整模型。
  5. 使用 torch.save 保存: 现在你有了一个包含所有内容的独立模型,你可以使用 torch.save 及其状态字典来保存它。
  6. 加载模型: 你可以创建一个基础 Whisper 模型的实例,并使用 torch.load 加载保存的模型状态字典。

现在你应该能够使用 torch.load 成功加载和使用你的模型进行推理了!

标签:python,pytorch,checkpointing
From: 78795407

相关文章

  • 如何在 Numpy Python 中将 4 维数组的下三角形复制到上三角形?
    目标是将下三角形复制到上三角形。根据OP中提出的建议,起草了以下代码。importnumpyasnplw_up_pair=np.tril_indices(4,-1)arr=np.zeros((4,4,1,1))arr[1,:1,:,0]=1arr[2,:2,0,0]=2arr[3,:3,0,0]=3arr=arr+arr.T-np.diag(np.diag(arr))但是,它......
  • 如何在 Python 中对多行使用单个 INSERT INTO 语句?
    我目前正在开发一个DiscordPython机器人,我在其中循环遍历ForumTags列表,并为每个对象生成INSERTINTOSQL语句以将数据插入MySQL数据库。但是,我想要通过将所有这些单独的INSERTINTO语句组合到单个查询中来优化我的代码,如下所示:INSERTINTO......
  • 双 for 循环的 Pythonic 方式
    我有以下代码:importnumpyasnpepsilon=np.array([[0.,0.00172667,0.00071437,0.00091779,0.00154501],[0.00128983,0.,0.00028139,0.00215905,0.00094862],[0.00035811,0.00018714,0.,0.00029365,0.00036993......
  • 在 matplotlib 中绘制一个字符串函数 // 将 str 解释为 python 代码?
    我正在创建一个RPN计算器,尝试绘制用户给出的函数。例如,如果用户输入"xsin3*plot"我希望它绘制sin(x)*3其代码如下。注意:问题在ifprompt=="plot"userInputX=""#userInputXisalwaysreplacedbefore......
  • Python (Pebble) - 超时功能。当 TimeoutError 发生时,获取从 iterable 传递给函数的值
    我正在尝试在Pebble中设置工作超时(基本上有效)frompebbleimportProcessPoolfrommultiprocessingimportProcess,Pool,cpu_countimporttimedeftest_fn(randomNumberFromList):#print(f'Beginngingforthisnumber:{randomNumberFromList}')ifr......
  • 为什么在 Python 上使用正则表达式组功能会给出不同的输出
    importrestring1="aaabaa"zusuchen="aa"#1m_start=re.finditer(fr'(?=({zusuchen}))',string1)results=[(match.start(1),match.end(1)-1)formatchinm_start]forzinresults:print(z)print("Now#2:"......
  • 如何在python3中找到文件的长度?
    我的第一个.py:defcreate_file(file_name):list=["ab","cd","ef"]foriinlist:withopen(file_name,"a+")asinput_file:print("{}".format(i),file=input_file)我的第二个.py:fromfirstimport......
  • 哪种 python 日志记录风格是推荐的或标准的?
    我是Python新手。介于以下2个选项之间。对于python来说,推荐哪种风格或者更好?logging.info(f"Won'tsavemodelasscoreisbelow0,score:{score}")logging.info("Won'tsavemodelasscoreisbelow0,score%s",score)我个人更喜欢第二种方法。在Python......
  • python 协程 自定义互斥锁
    最近在用python的一款异步web框架sanic搭建web服务,遇到一个需要加特定锁的场景:同一用户并发处理订单时需要排队处理,但不同用户不需要排队。如果仅仅使用asyncwithasyncio.Lock()的话。会使所有请求都排队处理。1importasyncio2importdatetime34lock=asyncio.L......
  • Python 获取tiktok视频评论回复数据 api接口
    TIKTOKapi接口爬取tiktok视频评论回复数据详细采集页面如图https://www.tiktok.com/@dailymail/video/7329872821990182190?q=neural%20link&t=1706783508149请求APIhttp://api.xxxx.com/tt/video/info/comment/reply?video_id=7288909913185701125&comment_id=7294900......