加载Tokenizer和基础模型的解析及文件介绍:from_pretrained到底加载了什么?

加载Tokenizer和基础模型的解析及文件介绍

在使用Hugging Face的transformers库加载Tokenizer和基础模型时,涉及到许多文件的调用和解析。这篇博客将详细介绍这些文件的功能和它们在加载过程中的作用,同时结合代码片段进行解析。

下图是我本地下载好模型之后的样子:
在这里插入图片描述

下面结合上图进行解释。


1. 加载 Tokenizer

代码示例:

from transformers import AutoTokenizer

model_path = "你的模型路径"
tokenizer = AutoTokenizer.from_pretrained(model_path)

AutoTokenizer.from_pretrained(model_path) 的作用是加载一个Tokenizer对象,用于将文本转换为模型可识别的输入格式(token ID)。在加载过程中,它会依赖模型路径下的一些关键文件。

加载的文件:
  1. tokenizer.json

    • 作用:定义了词汇表和分词规则,是Tokenizer的核心文件。
    • 格式:通常是JSON格式,包含了以下内容:
      • vocab: 词汇表,每个词汇对应一个唯一的token ID。
      • merges: 如果是基于BPE(Byte Pair Encoding)的Tokenizer,会有合并规则。
      • special_tokens: 特殊标记(如<pad><unk><eos>等)。
  2. tokenizer_config.json

    • 作用:定义了Tokenzier的配置,比如是否使用特殊token、分词方式等。
    • 常见字段
      • do_lower_case: 是否将文本转为小写。
      • bos_token/eos_token: 开始和结束标记。
      • pad_token: 填充标记。
  3. special_tokens_map.json

    • 作用:映射特殊token(如<pad><unk>)到词汇表中的实际标记。
    • 常见字段
      • pad_token: <pad>
      • unk_token: <unk>
      • cls_token: <cls>
加载流程:
  1. 优先加载tokenizer.json来获取分词规则和词汇表。
  2. 使用tokenizer_config.json设置额外的配置参数。
  3. 如果存在special_tokens_map.json,会根据该文件映射特殊标记。

2. 加载基础模型(预训练权重)

代码示例:

from transformers import AutoModelForCausalLM

base_model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-8b",  # 替换为基础模型路径
    torch_dtype=torch.float16,
    device_map="auto"
)

AutoModelForCausalLM.from_pretrained 的作用是加载预训练的基础模型,用于执行因果语言建模任务(如生成文本)。在加载时,它会调用模型路径中的一系列文件。

加载的文件:
  1. config.json

    • 作用:定义模型的结构配置,例如层数、隐藏单元数量、注意力头数等。
    • 常见字段
      • hidden_size: 隐藏层的大小。
      • num_attention_heads: 注意力头的数量。
      • num_hidden_layers: 模型的层数。
      • max_position_embeddings: 最大序列长度。
  2. generation_config.json

    • 作用:定义生成任务的配置,例如生成文本时的最大长度、温度等。
    • 常见字段
      • max_length: 生成文本的最大长度。
      • temperature: 生成时的多样性控制参数。
      • top_k/top_p: 生成时的采样策略。
  3. model.safetensorsmodel-xxxx-of-xxxx.safetensors

    • 作用:保存模型的权重。
    • 文件名解析:权重文件可能被分片存储,文件名中会标注分片信息,例如:
      • model-00001-of-00004.safetensors: 表示这是四个权重分片中的第一个。
    • 格式safetensors格式是优化的序列化格式,安全且高效。
  4. model.safetensors.index.json

    • 作用:如果权重文件被分片存储,该文件记录了每个分片的索引和分布信息。
加载流程:
  1. 解析config.json,构建基础模型的结构。
  2. 加载权重文件(safetensors.bin格式)到模型中。
  3. 如果有分片,则根据index.json加载完整的权重。

3. 总结文件作用
文件名作用加载阶段
tokenizer.json定义词汇表和分词规则加载Tokenizer
tokenizer_config.json配置Tokenizer的额外参数加载Tokenizer
special_tokens_map.json映射特殊标记到词汇表中的实际标记加载Tokenizer
config.json定义模型的结构配置加载基础模型
generation_config.json定义生成任务的配置参数加载基础模型
model.safetensors保存模型权重加载基础模型
model-xxxx-of-xxxx.safetensors分片保存的模型权重加载基础模型
model.safetensors.index.json记录分片权重的索引和分布信息加载基础模型

4. 示例:加载和评估模型

以下是一个完整的代码示例,展示如何加载本地的模型文件并进行简单的评估:

from transformers import AutoTokenizer, AutoModelForCausalLM

# 模型路径
model_path = "xxx/models--meta-llama--Llama-3.1-8B/snapshots/d04e592b4f6aa9cfee91e2e20afa771667e1d4b"

# 1. 加载Tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_path)

# 2. 加载基础模型
model = AutoModelForCausalLM.from_pretrained(
    model_path,
    torch_dtype=torch.float16,
    device_map="auto"
)

# 3. 测试生成
input_text = "你好,欢迎使用LLaMA模型。"
inputs = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_length=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

5. 注意事项
  1. 模型文件完整性:确保config.jsonsafetensors等文件都在路径中,否则可能加载失败。
  2. 设备配置:根据硬件资源调整device_map参数。
  3. 特殊Token:如果生成结果中出现<unk>等标记,可以检查special_tokens_map.json文件是否正确配置。

通过这篇博客,希望读者对加载Tokenizer和基础模型涉及的文件及其作用有了全面的了解,并能够在自己的任务中正确调用这些文件。

后记

2024年12月28日22点58分于上海,在GPT4o大模型辅助下完成。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!

文章目录 说个问题&#xff08;很严重&#xff01;&#xff01;&#xff01;&#xff09;写个方案会Python看这里Python环境搭建不存在多行合并存在多行合并 不会Python看这里 说个问题&#xff08;很严重&#xff01;&#xff01;&#xff01;&#xff09; 平时处理Excel表格…

goview——vue3+vite——数据大屏配置系统

低代码数据大屏配置系统&#xff1a; 数据来源是可以动态api配置的&#xff1a; 配置上面的api接口后&#xff0c;在数据过滤中进行数据格式的转化。 以上内容&#xff0c;来源于https://gitee.com/dromara/go-view/tree/master-fetch/ 后端代码如下&#xff0c;需要更改…

ADC相关算法以及热敏电阻测温

目录 前言 一、平均值滤波算法 二、快速排序算法的使用 三、中位值滤波算法 四、二分查找法 4.1 二分查找法查找某个元素是否存在 4.2 二分查找法查找接近目标数值的元素的下标 五、NTC热敏电阻实现测温 5.1 分层设计 5.2 软件流程图 ​编辑 5.3 API接口及数据结构 5…

计算机的错误计算(一百九十四)

摘要 用两个大模型计算 其中&#xff0c;一个大模型通过化简&#xff0c;得出正确结果 0&#xff1b;而另外一个在化简过程中出现错误&#xff0c;得出了错误结果。 例1. 计算 下面是一个大模型的推导化简过程。 以上为一个大模型的回答。 下面是另外一个大模型的回复。 点评…

任意文件包含漏洞原理解析及演示

原理 文件包含漏洞&#xff1a;即file inclusion&#xff0c;意思是文件包含&#xff0c;是指当服务器开启allow_url_include选项时&#xff0c;就可以通过PHP的某些特性函数&#xff08;include()&#xff0c;require()和include_once()&#xff0c;requir_once()&#xff09;…

Linux系统之tree命令的基本使用

Linux系统之tree命令的基本使用 一、tree命令介绍二、tree工具安装三、tree命令帮助3.1 查询帮助信息3.2 tree命令帮助解释 四、tree命令的基本使用4.1 直接使用4.2 *限制显示的层级4.3 仅显示目录4.4 不显示隐藏文件4.5 显示文件大小4.6 彩色输出4.7 输出到文件4.8 输出不同格…

微信小程序性能优化、分包

性能优化是任何应用开发中的重要组成部分&#xff0c;尤其是在移动环境中。对于微信小程序而言&#xff0c;随着用户量的增加和应用功能的丰富&#xff0c;性能优化显得尤为关键。良好的性能不仅提升用户体验&#xff0c;还能增加用户留存率和应用的使用频率。我们将探讨如何在…

【星海随笔】删除ceph

cephadm shell ceph osd set noout ceph osd set norecover ceph osd set norebalance ceph osd set nobackfill ceph osd set nodown ceph osd set pause参考文献&#xff1a; https://blog.csdn.net/lyf0327/article/details/90294011 systemctl stop ceph-osd.targetyum re…

Unity游戏环境交互系统

概述 交互功能使用同一个按钮或按钮列表&#xff0c;在不同情况下显示不同的内容&#xff0c;按下执行不同的操作。 按选项个数分类 环境交互系统可分为两种&#xff0c;单选项交互&#xff0c;一般使用射线检测&#xff1b;多选项交互&#xff0c;一般使用范围检测。第一人…

DVWA安装

这里讲的很清楚&#xff0c;如果是win10的话可能会出现端口80占用的情况&#xff0c; 使用管理员身份运行 cmdnet stop http //停止系统http服务sc config http start disabled //禁用服务的自动启动&#xff0c;此处注意等号后面的空格不可少

Oracle考试多少分算通过?

OCP和OCM认证的考试及格分数并不是固定的&#xff0c;而是根据考试的难度和考生的整体表现来确定。对于OCP认证&#xff0c;考生需要全面掌握考试要求的知识和技能&#xff0c;并在考试中表现出色才有可能通过。而对于OCM认证&#xff0c;考生则需要在每个模块中都达到一定的水…

18_HTML5 Web IndexedDB 数据库 --[HTML5 API 学习之旅]

HTML5 Web IndexedDB API 是一种在用户浏览器中存储大量结构化数据的机制&#xff0c;它允许存储和检索键值对&#xff0c;其中键可以是任何有效的JavaScript对象。IndexedDB 主要用于需要复杂查询的数据密集型Web应用。 IndexedDB 的特点&#xff1a; HTML5 Web IndexedDB A…

【Seata】分布式事务问题和理论基础

目录 1.分布式事务问题 1.1本地事务 1.2分布式事务 2.理论基础 2.1CAP定理 2.1.1一致性 2.1.2可用性 2.1.3分区容错 2.1.4矛盾 2.2BASE理论 2.3解决分布式事务的思路 1.分布式事务问题 1.1本地事务 本地事务&#xff0c;也就是传统的单机事务。在传统数据库事务中…

【数据库初阶】Linux中库的基础操作

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; 数据库初阶 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 亲爱的小伙伴们&#xff0c;大家好&#xff01;在这篇文章中&#xff0c;我们将深入浅出地为大家讲解 Linux…

数据结构与算法Python版 图

文章目录 一、图二、抽象数据类型图三、图的实现-邻接列表法 一、图 表示图的英文单词 painting&#xff1a;用画刷画的油画drawing&#xff1a;用硬笔画的素描/线条画picture&#xff1a;真实形象所反映的画&#xff0c;如照片等&#xff0c;如take pictureimage&#xff1a…

Word表格另起一页解决办法

Word表格另起一页解决办法 表格设置根据内容自动调整&#xff0c;取消指定高度第1步 第2步

Python数据可视化案例——折线图

目录 json介绍&#xff1a; Pyecharts介绍 安装pyecharts包? 构建一个基础的折线图 配置全局配置项 综合案例&#xff1a; 使用工具对数据进行查看?&#xff1a; 数据处理 json介绍&#xff1a; json是一种轻量级的数据交互格式&#xff0c;采用完全独立于编程语言的…

【Seata】seata的部署和集成

一、部署Seata的tc-server 1.下载 首先我们要下载seata-server包&#xff0c;地址在http://seata.io/zh-cn/blog/download.html 当然&#xff0c;课前资料也准备好了&#xff1a; 2.解压 在非中文目录解压缩这个zip包&#xff0c;其目录结构如下&#xff1a; 3.修改配置 修…

链表 之 无头结点【哨兵位】单向非循环链表【单链表】增删改查 等方法

系列文章目录 &#x1f388; &#x1f388; 我的CSDN主页:OTWOL的主页&#xff0c;欢迎&#xff01;&#xff01;&#xff01;&#x1f44b;&#x1f3fc;&#x1f44b;&#x1f3fc; &#x1f389;&#x1f389;我的C语言初阶合集&#xff1a;C语言初阶合集&#xff0c;希望能…

GCP Cloud Architect exam - PASS

备考指南 推荐视频课程 https://www.udemy.com/course/google-cloud-architect-certifications/?couponCodeKEEPLEARNING 推荐题库 https://www.udemy.com/course/gcp-professional-cloud-architect-exam-practice-tests-2024​/?couponCodeKEEPLEARNING 错题集 http…