(StackOverflow)使用Huggingface Transformers从磁盘加载预训练模型

这是在Stack Overflow上的一个问答,链接如下:

Load a pre-trained model from disk with Huggingface Transformers - Stack Overflowicon-default.png?t=N7T8https://stackoverflow.com/questions/64001128/load-a-pre-trained-model-from-disk-with-huggingface-transformers从这个问答中,我们可以了解到

  • 使用from_pretrained方法加载预训练模型,无需每次下载权重数据。
  • 在加载模型时,需要确保提供的路径是正确的模型标识符或包含config.json文件的目录路径。
  • 使用相对路径或绝对路径。
  • 使用save_pretrained方法保存文件。
  • 示例代码展示了如何加载和保存预训练模型。

🚚🚒🚑🚎🚐🚌🛻🚙🛺🚕🚓🚗🚚🚒🚑🚎🚐🚌🛻🚙🛺🚕🚓🚗

问题描述:

根据from_pretrained的文档,我了解到我不必每次都下载预训练向量(权重数据),我可以使用以下语法将它们保存并从磁盘加载:

 - a path to a `directory` containing vocabulary files required by the tokenizer, for instance saved using the :func:`~transformers.PreTrainedTokenizer.save_pretrained` method, e.g.: ``./my_model_directory/``.- (not applicable to all derived classes, deprecated) a path or url to a single saved vocabulary file if and only if the tokenizer only requires a single vocabulary file (e.g. Bert, XLNet), e.g.: ``./my_model_directory/vocab.txt``.

- 一个指向包含分词器所需词汇文件的目录的路径,例如使用 :func:`~transformers.PreTrainedTokenizer.save_pretrained` 方法保存的目录,例如:``./my_model_directory/``。
  - (不适用于所有派生类,已弃用)仅当分词器仅需要单个词汇文件(例如Bert,XLNet)时,才适用于指向单个保存的词汇文件的路径或URL,例如:``./my_model_directory/vocab.txt``。 

所以,我去了模型中心:

https://huggingface.co/models

我找到了我想要的模型:

https://huggingface.co/bert-base-cased

我从他们提供的链接下载了它:

使用掩码语言建模(MLM)目标在英语语言上预训练的模型。它在这篇论文中被介绍,并在这个代码库中首次发布。该模型区分大小写:它区分英语和English。

存储在这个路径下:

  /my/local/models/cased_L-12_H-768_A-12/

 这个路径下包含

 ./../bert_config.jsonbert_model.ckpt.data-00000-of-00001bert_model.ckpt.indexbert_model.ckpt.metavocab.txt

 配置了路径,并加载分词器:

PATH = '/my/local/models/cased_L-12_H-768_A-12/'tokenizer = BertTokenizer.from_pretrained(PATH, local_files_only=True)

 结果报错:

>           raise EnvironmentError(msg)
E           OSError: Can't load config for '/my/local/models/cased_L-12_H-768_A-12/'. Make sure that:
E           
E           - '/my/local/models/cased_L-12_H-768_A-12/' is a correct model identifier listed on 'https://huggingface.co/models'
E           
E           - or '/my/local/models/cased_L-12_H-768_A-12/' is the correct path to a directory containing a config.json file

 同样的问题发生在我直接链接json文件时:

  PATH = '/my/local/models/cased_L-12_H-768_A-12/bert_config.json'tokenizer = BertTokenizer.from_pretrained(PATH, local_files_only=True)if state_dict is None and not from_tf:try:state_dict = torch.load(resolved_archive_file, map_location="cpu")except Exception:raise OSError(
>                   "Unable to load weights from pytorch checkpoint file. ""If you tried to load a PyTorch model from a TF 2.0 checkpoint, please set from_tf=True. ")
E               OSError: Unable to load weights from pytorch checkpoint file. If you tried to load a PyTorch model from a TF 2.0 checkpoint, please set from_tf=True.

 answer

相对路径?绝对路径?

文件相对于您的模型文件夹的位置在哪里? 我认为它必须是相对路径而不是绝对路径。 因此,如果您编写代码的文件位于'my/local/'中,则您的代码应如下所示:

```
PATH = 'models/cased_L-12_H-768_A-12/'
tokenizer = BertTokenizer.from_pretrained(PATH, local_files_only=True)
```

您只需要指定包含所有文件的文件夹,而不是直接指定文件。 我认为这绝对是与路径有关的问题。 尝试更改“斜杠”的样式:'/' vs'\',这些在不同的操作系统中是不同的。 还可以尝试使用“.”,例如./models/cased_L-12_H-768_A-12/等。

推荐【save_pretrained】方法保存文件。

不确定你从哪里获取这些文件。当我检查链接时,我可以下载以下文件:config.json,flax_model.msgpack,modelcard.json,pytorch_model.bin,tf_model.h5,vocab.txt。此外,最好通过tokenizer.save_pretrained('YOURPATH')和model.save_pretrained('YOURPATH')保存文件,而不是直接下载。- cronoik
2020年10月4日21:59

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfigYOURPATH = 'E:/workspace/Qwen/Qwen-7B-Chat'name = 'Qwen/Qwen-7B-Chat'
tokenizer = AutoTokenizer.from_pretrained(name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(name, device_map="auto", trust_remote_code=True, bf16=True).eval()
tokenizer.save_pretrained(YOURPATH)
model.save_pretrained(YOURPATH)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/128020.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python笔记:pandas/geopandas DataFrame逐行遍历

在Pandas和GeoPandas中,可以使用几种不同的方法来遍历DataFrame的每一行 0 数据 import pandas as pddata {column1: range(1, 1001),column2: range(1001, 2001) } df pd.DataFrame(data) df 1 iterrows for index, row in df.iterrows():print(index)print(r…

C语言学生成绩录入系统

一、系统概述 该系统是一个由链表创建主菜单的框架,旨在快速创建学生成绩录入系统的主菜单结构。其主要任务包括: 实现链表的创建、插入和遍历功能,用于存储和展示学生成绩录入系统各个模块的菜单项。 2. 提供用户友好的主菜单界面&#xf…

一文带你了解IAM(身份与访问管理)

一文带你了解IAM(身份与访问管理) 在进入新公司时,领导说让我们改版之后采用IAM的方式进行资源管理,what?IAM是什么?恕我无知了。后来查阅了相关资料才知道。 IAM不仅是一种产品,也是大部分产品…

互联网云厂商大转向:在海外重燃新「战事」

2023,云厂出海的第七个年头,三朵云的海外布局都在加速,在“主动出海”的大背景下,云厂的海外战场也正在发生新的变化。 作者|思杭 编辑|皮爷 出品|产业家 中国云厂,正在将目光从东南亚转移至中东。 东南亚的互…

软考程序员考试大纲(2023)

文章目录 前言一、考试说明1.考试目标2.考试要求3.考试科目设置 二、考试范围考试科目1:计算机与软件工程基本知识1.计算机科学基础2.计算机系统基础知识3.系统开发和运行知识4.网络与信息安全基础知识5&am…

高级IO(Linux)

高级IO 五种IO模型高级IO重要概念同步通信 vs 异步通信阻塞 vs 非阻塞 非阻塞IOfcntl实现函数SetNoBlock轮询方式读取标准输入 I/O多路转接之select初识selectselect函数原型参数解释参数timeout取值关于fd_set结构关于timeval结构函数返回值三级目录 理解select执行过程socket…

Games104现代游戏引擎笔记高级ai

Hierarchical Task Network 层次任务网络 World State是一个主观的对世界的认知,并不是一个真实世界的描述 Sensors负责从游戏环境中抓取各种状态 HTN Domain 存放层次化的树状结构Task和之间的关联关系1 Planner 根据World State从 Domain 里规划 task Plan Runne…

《DevOps 精要:业务视角》- 读书笔记(一)

DevOps 精要:业务视角(一) 第1章 什么是DevOps1.1 起源1.1.1 敏捷软件开发方法1.1.2 管理基础设施即代码1.1.3 这是必然的 1.2 定义1.3 为什么要实施DevOps?1.3.1 缩短市场响应时间1.3.2 减少技术债务1.3.3 消除脆弱性 1.4 历史起源1.5 常见误…

【1.1】神经网络:关于神经网络的介绍

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏: 神经网络(随缘更新) ✨特色…

Android Studio 是如何和我们的手机共享剪贴板的

背景 近期完成了target33的项目适配升级,随着AGP和gradle的版本升级,万年老版本Android Studio(后文简称AS)也顺便升级到了最新版Android Studio Giraffe | 2022.3.1,除了新UI外,最让我好奇的是这次的Running Devices功能(官方也称为Device mirroring)可以控制真机了. 按照操…

从入门到精通,30天带你学会C++【第七天:for循环和while循环以及数组的学习】(学不会你找我)

目录 Everyday English 前言 数组 数组的概念 数组的定义 数组的下标 for循环 循环是什么 基本格式 多重循环 while循环 do-while循环 总结 Everyday English To shine , not be illuminated. 去发光,而不是被照亮。 前言 好久不见&#xff0c…

6-3 递增的整数序列链表的插入 分数 5

List Insert(List L, ElementType X) {//创建结点List node (List)malloc(sizeof(List));node->Data X;node->Next NULL;List head L->Next; //定位real头指针//空链表 直接插入if (head NULL) {L->Next node;node->Next head;return L;}//插入数据比第…