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

news2025/1/5 9:44:38

加载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大模型辅助下完成。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringAI从入门到熟练

学习SpringAI的记录情况 文章目录 前言 因公司需要故而学习SpringAI文档&#xff0c;故将自己所见所想写成文章&#xff0c;供大佬们参考 主要是为什么这么写呢&#xff0c;为何不抽出来呢&#xff0c;还是希望可以用的时候更加方便一点&#xff0c;如果大家有需求可以自行去…

嵌入式系统中C++的基本使用方法

大家好,今天主要给大家分享一下,最近操作C++代码的控制方法。 什么是构造函数?构造函数在对象实例化时被系统自动调用,仅且调用一次。 什么是析构函数?与构造函数相反, 在对象结束其生命周期时系统自动执行析构函数。 第一个:析构函数与构造函数区别 实例代码: #inclu…

【Qt】多元素控件:QListWidget、QTableWidget、QTreeWidget

目录 QListWidget 核心属性&#xff1a; 核心方法&#xff1a; 核心信号&#xff1a; 例子&#xff1a; QListWidgetItem QTableWidget 核心方法&#xff1a; 核心信号 QTableWidgetItem 例子&#xff1a; QTreeWidget 核心方法&#xff1a; 核心信号&#xff1a…

HTML5 标签输入框(Tag Input)详解

HTML5 标签输入框&#xff08;Tag Input&#xff09;详解 标签输入框&#xff08;Tag Input&#xff09;是一种用户界面元素&#xff0c;允许用户输入多个标签或关键词&#xff0c;通常用于表单、搜索框或内容分类等场景。以下是实现标签输入框的详细讲解。 1. 任务概述 标…

前端加载自己制作的栅格切片服务充当底图

注意mapview的center属性和tilelayer.fullExtent的区别。 前者是设置mapview显示的中心点坐标&#xff0c; const view new MapView({ container: "viewDiv", map: map, center:[100,25] }); 后者是读…

Windows 安装Mysql 8.1.0版本,并迁移数据库

一、下载MySQL压缩包 进入MySQL官网&#xff1a;https://downloads.mysql.com/archives/community/ 下载zip包到本地&#xff0c;然后解压缩。 二、安装MySQL 1、 创建my.ini文件 新创建一个my.ini文件&#xff0c;文件内容如下&#xff0c;记得修改【basedir】和【datadir…

uniapp——微信小程序,从客户端会话选择文件

微信小程序选择文件 文章目录 微信小程序选择文件效果图选择文件返回数据格式 API文档&#xff1a; chooseMessageFile 微信小程序读取文件&#xff0c;请查看 效果图 选择文件 /*** description 从客户端会话选择文件* returns {String} 文件路径*/ const chooseFile () &g…

学习threejs,导入CTM格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.ColladaLoader DAE模…

1、pycharm、python下载与安装

1、去官网下载pycharm 官网&#xff1a;https://www.jetbrains.com/pycharm/download/?sectionwindows 2、在等待期间&#xff0c;去下载python 进入官网地址&#xff1a;https://www.python.org/downloads/windows/ 3、安装pycharm 桌面会出现快捷方式 4、安装python…

虚拟机Centos下安装Mysql完整过程(图文详解)

目录 一. 准备工作 1. 设置虚拟机静态IP 2. 卸载Mysql 3. 给CentOS添加rpm源 二. 安装MySQL 1. 安装mysql服务 2. 启动mysql服务 3. 开启MySQL开机自启动 4. 查看mysql服务状态 5. 查看mysql初始密码 6. 登录mysql &#xff0c;修改密码 7. 允许外部访问MySQL数据库…

SwiftUI:多语言实现富文本插值

实现的UI需求&#xff1a; 要求&#xff1a; 英文显示&#xff1a;3068 people have joined this plan today! 中文显示&#xff1a;今日有 3068 人已加入此计划&#xff01; 实现代码&#xff1a; Text(AttributedString(localized:"**\(payPeoples)** people have joi…

中巨伟业推出高安全高性能32位智能卡内核可编程加密芯片SMEC88SP/ST

1、产品特性  以最高安全等级的智能卡芯片内核为基础&#xff0c;具有极高的软硬件安全性  实现客户关键功能或算法代码下载&#xff0c;用户可以灵活实现自有知识产权的保护  标准 SOP8、SOT23-6 封装形式&#xff0c;器件封装小  标准 I2C 接口&#xff0c;具有接…

部署SenseVoice

依赖 Conda cuda pythor 查看GPU版本-CSDN博客 创建虚拟conda环境 conda create --name deeplearn python3.10 conda activate deeplearn git clone https://github.com/FunAudioLLM/SenseVoice.git cd SenseVoice pip install -r requirements.txt pip install gradio pip …

微信流量主挑战:用户数30!新增文档转化功能,解决docker运行jar包报错SimSun找不到的问题(新纪元5)

哎呀&#xff0c;今天忙到飞起&#xff0c;文章晚点更新啦&#xff01;不过好消息是&#xff0c;我们的小程序用户终于突破30啦&#xff0c;感谢大家的支持&#xff01;而且&#xff0c;大家期待已久的文档转化功能明天就要上线啦&#xff0c;目前支持word转pdf&#xff0c;pdf…

操作系统课后题总复习

目录 一、第一章 1.1填空题 1.2单项选择题 1.3多项选择题 1.4判断题 1.5名词解释 1.6简答题 二、第二章 2.1填空题 2.2单项选择题 2.3 多项选择题 2.4判断题 2.5名词解释 2.6简答题 三、第三章 3.1填空题 3.2单项选择题 3.3多项选择题 3.4判断题 3.5名词解…

C语言期末复习笔记(下)

目录 九、指针 1.指针变量的定义和初始化 2.间接寻址符* 3.按值调用和按址调用 4.实例 5.函数指针 6.指针变量和其它类型变量的对比 十、字符串 1.字符串常量 2.字符串的存储 3.字符指针 4.字符串的访问和输入/输出 5.字符串处理函数 &#xff08;1&#xff09;str…

保姆级教程Docker部署ClickHouse镜像

目录 1、安装Docker及可视化工具 2、创建挂载目录 3、获取配置文件 4、运行ClickHouse容器 5、Compose运行ClickHouse容器 6、查看ClickHouse运行状态 7、安装包部署 1、安装Docker及可视化工具 Docker及可视化工具的安装可参考&#xff1a;Ubuntu上安装 Docker及可视化…

飞牛私有云APP结合cpolar内网穿透技术实现远程连接本地fnOS NAS

文章目录 前言1. 本地连接测试2. 飞牛云安装Cpolar3. 配置公网连接地址4. 飞牛云APP连接测试5. 固定APP远程地址6. 固定APP地址测试 前言 现在生活和工作中的各种设备都变得越来越智能&#xff0c;而数据存储的需求也随之剧增。想象一下&#xff1a;你正在外地出差&#xff0c…

计算机网络 (17)点对点协议PPP

一、PPP协议的基本概念 PPP协议最初设计是为两个对等节点之间的IP流量传输提供一种封装协议&#xff0c;它替代了原来非标准的第二层协议&#xff08;如SLIP&#xff09;。在TCP/IP协议集中&#xff0c;PPP是一种用来同步调制连接的数据链路层协议&#xff08;OSI模式中的第二层…

RC充电电路仿真与分析

RC充电原理 下图是一个常见的RC充电电路&#xff1a;&#xff08;假设R10K&#xff0c;C100nF&#xff09; SW断开时&#xff0c;这个电路处于断路状态&#xff0c;C既没有充电也没有放电&#xff1b;SW闭合时&#xff0c;直流电源5V为电容C充电&#xff1b; 充电时电容两端…