AI Transformers 架构体系 权重文件类型 safeterson和gguf格式转换【2-1】

  • 模型权重文件:存储训练好的模型参数,也就是w和b,是模型推理和微调的基础
    • .pt.ckpt.safetensors、gguf
  • 配置文件:确保模型架构的一致性,使得权重文件能够正确加载
    • config.jsongeneration_config.json
  • 词汇表文件:保证输入输出的一致性
    • tokenizer.jsontokenizer_config.json

1、模型权重文件

  • 模型权重文件是存储训练好的模型参数,是模型推理和微调的基础 ,常见的有.pt、.ckpt、.safetensors
  • 不同的框架(如TensorFlow、PyTorch)使用不同的模型文件格式

例如:

  • safetensors:适配多种框架,支持transformers库的模型加载
  • PyTorch:选择下载.pt或.bin格式的模型文件。
  • TensorFlow:选择下载.ckpt或.h5格式的模型文件。

1.1 safetensors是什么?
  • .safetensors是由Hugging Face提出的一种新型的模型权重文件格式,有以下特点:
  1. 安全性:.safetensors采用了加密和校验机制,防止模型文件被篡改或注入恶意代码
  2. 性能:优化了数据加载和解析速度
  3. 跨框架支持:有多种深度学习框架的兼容性,便于在不同环境中使用
  • .safetensors中,大模型可被分为多个部分,格式类似modelname-0001.safetensors、modelname-0002.safetensors
  • model.safetensors.index.json是索引文件,记录了模型的各个部分的位置和大小信息

2、配置文件

  • config.json、generation_config.json
2.1 config.json

  • config.json包含模型的配置信息(如模型架构、参数设置等),可能包含隐藏层的数量、每层的神经元数、注意力头的数量等
  • config.json的基本结构如下:

(base) [root@inspur-nf5468m6-001 Qwen2.5-VL-32B-Instruct]# cat config.json 
{"architectures": ["Qwen2_5_VLForConditionalGeneration"],"attention_dropout": 0.0,"eos_token_id": 151645,"hidden_act": "silu","hidden_size": 5120,"image_token_id": 151655,"initializer_range": 0.02,"intermediate_size": 27648,"max_position_embeddings": 128000,"max_window_layers": 64,"model_type": "qwen2_5_vl","num_attention_heads": 40,"num_hidden_layers": 64,"num_key_value_heads": 8,"pad_token_id": 151643,"rms_norm_eps": 1e-06,"rope_scaling": {"mrope_section": [16,24,24],"rope_type": "default","type": "default"},"rope_theta": 1000000.0,"sliding_window": 32768,"tie_word_embeddings": false,"torch_dtype": "bfloat16","transformers_version": "4.49.0","use_cache": true,"use_sliding_window": false,"video_token_id": 151656,"vision_config": {"hidden_size": 1280,"in_chans": 3,"intermediate_size": 3456,"model_type": "qwen2_5_vl","out_hidden_size": 5120,"spatial_patch_size": 14,"tokens_per_second": 2,"torch_dtype": "bfloat16"},"vision_end_token_id": 151653,"vision_start_token_id": 151652,"vision_token_id": 151654,"vocab_size": 152064
}
  • 例如architectures字段指定了模型的架构,hidden_act字段指定了隐藏层的激活函数,hidden_size字段指定了隐藏层的神经元数
  • num_attention_heads字段指定了注意力头的数量,max_position_embeddings字段指定了模型能处理的最大输入长度等
2.2 generation_config.json
  • generation_config.json是用于生成文本的配置文件,包含了生成文本时的参数设置,如max_lengthtemperaturetop_k
  • generation_config.json的基本结构如下:
(base) [root@inspur-nf5468m6-001 Qwen2.5-VL-32B-Instruct]# cat generation_config.json 
{"bos_token_id": 151643,"pad_token_id": 151643,"do_sample": true,"eos_token_id": [151645,151643],"repetition_penalty": 1.05,"temperature": 0.000001,"transformers_version": "4.49.0"
}
  • 例如bos_token_id字段指定了开始标记的ID,eos_token_id字段指定了结束标记的ID,do_sample字段指定了是否使用采样,temperature字段用于控制生成文本的随机性,max_length字段指定了生成文本的最大长度,top_p字段指定了采样的概率等
  • config.json 和 generation_config.json 都可能包含 "bos_token_id"(Beginning of Sequence Token ID)和 "eos_token_id"(End of Sequence Token ID)。在config.json中,这两个字段用于模型的加载和训练,而在generation_config.json中,这两个字段用于生成文本时的参数设置
  • config.json 提供模型的基本信息,而 generation_config.json 则细化为生成任务的具体需求

3、词汇表文件

词汇表文件包含了模型使用的词汇表或标记器信息,是自然语言处理模型理解和生成文本的基础。

  • tokenizer.jsontokenizer_config.json
3.1 tokenizer.json
  • tokenizer.json包含了模型使用的词汇表信息,如词汇表的大小、特殊标记的ID等
  • tokenizer.json的基本结构如下:

{"version": "1.0","truncation": {"max_length": 128,"strategy": "longest_first"},"padding": {"side": "right","pad_id": 0,"pad_token": "[PAD]"},"added_tokens": [{"id": 128010,"content": "[CUSTOM]"}],"normalizer": {"type": "NFD","lowercase": true,"strip_accents": true},"pre_tokenizer": {"type": "ByteLevel","add_prefix_space": true},"post_processor": {"type": "AddSpecialTokens","special_tokens": {"cls_token": "[CLS]","sep_token": "[SEP]"}},"decoder": {"type": "ByteLevel"},"model": {"type": "BPE",...}
}
  • 其中truncation是定义截断策略,用于限制输入序列的最大长度,padding用于统一输入序列的长度,added_tokens列出分词器额外添加到词汇表中的特殊标记或自定义标记
  • normalizer用于定义文本标准化的步骤和规则,用于在分词前对输入文本进行预处理,pre_tokenizer定义分词器如何将输入文本分割为初步的tokens,post_processor定义分词后处理的步骤
  • decoder定义如何将tokens ID 序列解码回原始文本,model定义了分词器的模型信息,如词汇表、合并规则(对于 BPE)等
3.2 tokenizer_config.json
  • tokenizer_config.json是用于生成文本的配置文件,包含了生成文本时的参数设置,如max_lengthtemperaturetop_k
  • tokenizer_config.json的基本结构如下:

{"added_tokens_decoder": [],"bos_token": "begin_of_text |>","clean_up_tokenization_spaces": true,"eos_token": "<|end_of_text|>","model_input_names": ["input_ids", "attention_mask"],"model_max_length": 1000000,"tokenizer_class": "PreTrainedTokenizerFast"
}

  • 其中added_tokens_decoder定义分词器在解码(将 token ID 转换回文本)过程中需要额外处理的特殊标记或自定义标记
  • bos_token、eos_token定义开始、结束标记,clean_up_tokenization_spaces定义了是否清除分词后的多余空格等
  • tokenizer.json和tokenizer_config.json的区别:tokenizer.json侧重于分词器的训练和加载,而tokenizer_config.json更侧重于生成文本时的参数设置

为什么很多模型都没有 vocab.txt 了?现代分词器采用了更为丰富和灵活的文件格式,如 tokenizer.json,以支持更复杂的分词策略和特殊标记处理

一、背景介绍

在AI模型部署领域,模型格式的选择直接影响推理效率、内存占用和跨平台兼容性。Safetensors和GGUF作为两种重要格式,分别服务于不同的应用场景:

  1. Safetensors
  2. 基于protobuf的二进制格式,提供安全的张量存储
  3. 支持分片(sharding)和加密功能
  4. 广泛用Hugging Face生态系统
  5. 典型应用:模型微调、分布式训练
  6. GGUF
  7. 基于GGML生态的新型格式(GGML v2)
  8. 针对CPU推理优化的内存布局
  9. 支持多种量化模式(4/5/8bit)
  10. 典型应用:边缘设备部署、低资源环境

本文将详细讲解如何通过Transformers框架将Safetensors模型转换为GGUF格式,并深入探讨转换过程中的关键技术细节。

二、转换原理与核心流程

2.1 格式转换的本质

Safetensors到GGUF的转换本质是: 1. 张量数据的序列化格式转换 2. 内存布局的优化重组 3. 可选的量化参数调整

2.2 核心转换流程

graph TDA[Safetensors模型] --> B[加载模型权重]B --> C[转换为PyTorch张量]C --> D[执行量化操作]D --> E[生成GGUF格式文件]E --> F[验证输出文件]

三、环境准备

3.1 依赖安装

# 安装Transformers库
pip install transformers# 安装GGUF工具链
pip install llama-cpp-python

3.2 硬件要求

  • CPU:Intel/AMD x86-64架构(推荐支持AVX2指令集)
  • 内存:至少为模型未量化状态的2倍
  • 存储:SSD推荐(处理大模型时提升速度)

公司环境 .

四、转换步骤详解

4.1 加载Safetensors模型

from transformers import AutoTokenizer, AutoModelForCausalLMmodel_name = "Qwen/Qwen2.5-VL-32B-Instruct"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="gpu")
tokenizer = AutoTokenizer.from_pretrained(model_name)

4.2 初始化GGUF转换器

from llama_cpp import GGUFConverterconverter = GGUFConverter(model=model,tokenizer=tokenizer,max_seq_len=2048,target_format="ggufv2"
)

4.3 执行转换操作

output_path = "Qwen2.5-VL-32B-Instruct.gguf"
converter.convert(output_path=output_path,quantization="q4_0",  # 可选量化模式force=True            # 覆盖已有文件
)

4.4 验证转换结果

from llama_cpp import Llamallm = Llama(model_path=output_path,n_ctx=2048,n_threads=8
)prompt = "你好,我是jettech"
output = llm(prompt, max_tokens=512)
print(output["choices"][0]["text"])

五、高级配置选项

5.1 量化参数设置

参数名称说明推荐值
quantization量化模式"q4_0"
group_size量化分组大小(影响精度)128
use_mmap使用内存映射加速加载True

5.2 内存优化策略

# 启用内存优化模式
converter = GGUFConverter(...,memory_friendly=True,temp_dir="/tmp/gguf_conversion"
)

六、常见问题与解决方案

6.1 转换失败处理

  • 错误信息Invalid tensor shape
    解决方案:检查模型架构是否兼容(需为CausalLM类型)
  • 错误信息Out of memory
    解决方案:分块处理模型(使用chunk_size参数)

七、格式对比与应用场景

7.1 关键指标对比

指标SafetensorsGGUF
典型文件大小原始浮点数量化后1/4-1/8
加载速度较慢(需反序列化)极快(内存映射)
推理速度CPU/GPU优化CPU极致优化
跨平台支持全平台x86/ARM

7.2 适用场景推荐

  • Safetensors:模型训练、GPU推理、云服务部署
  • GGUF:边缘设备、低功耗CPU、嵌入式系统

八、未来发展趋势

  1. 多模态支持:GGUF计划支持图像/音频模型
  2. 动态量化:运行时自适应量化技术
  3. 生态整合:Hugging Face官方可能提供直接转换工具

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

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

相关文章

K8S微服务部署及模拟故障观测

概述 本文介绍了如何在 Kubernetes (K8S) 集群中部署微服务&#xff0c;并模拟常见的故障场景&#xff08;如 Pod 故障、节点故障、网络故障&#xff09;以测试系统的容错能力。通过本实验&#xff0c;了解 Kubernetes 的自动恢复机制以及如何通过监控和日志分析快速定位和解决…

OpenStack Yoga版安装笔记(23)Swift安装

一、官方文档 Object Storage Install Guide — Swift 2.29.3.dev5 documentation 二、环境准备 之前的实验&#xff0c;已经有controller, compute1, block1节点&#xff0c;并已经完成Keystone、Glance、Nova、Neutron、Cinder等主要OpenStack Service的安装。 此处新增…

06-libVLC的视频播放器:推流RTMP

创建媒体对象 libvlc_media_t* m = libvlc_media_new_path(m_pInstance, inputPath.toStdString().c_str()); if (!m) return -1; // 创建失败返回错误 libvlc_media_new_path:根据文件路径创建媒体对象。注意:toStdString().c_str() 在Qt中可能存在临时字符串析构问题,建议…

少儿编程路线规划

少儿编程路线规划—一文写明白 现在有很多的编程机构&#xff0c;五花八门的。我有幸也见识到了大家的营销策略。这些策略有黑有白吧&#xff0c;从业几年&#xff0c;沉淀下来一些客户角度的干货&#xff0c;分享给大家。 如果是想以很远很远的就业为目的&#xff0c;毕业就…

ios app的ipa文件提交最简单的方法

ipa文件是ios的app打包后生成的二级制文件&#xff0c;在上架app store connect或做testflight测试的时候&#xff0c;它提示我们需要使用xcode、transporter或xcode命令行等方式来上传。 而xcode、transporter或xcode命令行的安装都需要使用mac电脑&#xff0c;假如没有mac电…

怎么查看LLM Transformer 架构进行并行计算和设备映射

怎么查看LLM Transformer 架构进行并行计算和设备映射 num_hidden_layers = model.config.num_hidden_layers print(num_hidden_layers) print(model) LLM(大语言模型)通常是基于 Transformer 架构 构建的,它由多个模块化的层(Layer)堆叠组成,每个层都有其独特的作用。…

微信小程序获得当前城市,获得当前天气

// // 获取用户当前所在城市 // wx.getLocation({// type: wgs84, // 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 // success: function(res) {// console.log(获取位置成功, res); // // 使用腾讯地图API进行逆地址解析 // wx…

美国国土安全部终止资助,CVE漏洞数据库项目面临停摆危机

&#xff08;图片来源&#xff1a;Jerome460 / Shutterstock&#xff09; 25年漏洞追踪体系即将终结 美国非营利研发组织MITRE宣布&#xff0c;其与美国国土安全部&#xff08;DHS&#xff09;签订的"通用漏洞披露&#xff08;CVE&#xff09;"数据库维护合同将于2…

Kafka下载和使用(Windows版)

Apache Kafka 是一个高吞吐量的分布式消息系统&#xff0c;广泛应用于日志收集、实时流处理等场景。本文将以 Windows 系统为例&#xff0c;详细介绍 Kafka 的安装和使用方法。 一、安装方式 在 Windows 系统上运行 Apache Kafka&#xff0c;通常有两种方式&#xff1a; 1.W…

RBAC的使用

1、简述RBAC的作用及工作流程 Rbac基于角色访问控制&#xff0c;用于管理用户对集群资源的访问权限&#xff0c;通过定义角色和绑定规则&#xff0c;将用户与权限进行关联&#xff0c;作用&#xff1a;权限精细化管理&#xff0c;操作便捷与统一管理&#xff0c;动态调整权限。…

【2025年泰迪杯数据挖掘挑战赛】A题 数据分析+问题建模与求解+Python代码直接分享

目录 2025年泰迪杯数据挖掘挑战赛A题完整论文&#xff1a;建模与求解Python代码1问题一的思路与求解1.1 问题一的思路1.1.1对统计数据进行必要说明&#xff1a;1.1.2统计流程&#xff1a;1.1.3特殊情况的考虑&#xff1a; 1.2 问题一的求解1.2.1代码实现1.2.2 问题一结果代码分…

Ethan独立开发产品日报 | 2025-04-18

1. Wiza Monitor 跟踪工作变动&#xff0c;并获取 Slack 和电子邮件通知。 Wiza Monitor是一款工作变动跟踪工具&#xff0c;可以实时追踪客户和潜在客户的职位变动&#xff0c;您还能通过电子邮件和Slack接收提醒&#xff0c;并自动更新您的客户关系管理系统&#xff08;CRM…

【工具变量】A股上市公司信息披露质量KV指数测算数据集(含do代码 1991-2024年)

KV指数&#xff08;Key Value Index&#xff09;作为评估信息披露质量的关键指标&#xff0c;在证券市场&#xff0c;尤其是A股市场上市公司信息披露监管与评估中占据重要地位。该指数通过系统化、定量化的方法&#xff0c;对企业发布的信息进行全面剖析与打分&#xff0c;精准…

【java实现+4种变体完整例子】排序算法中【基数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

基数排序详解及代码示例 基数排序原理 基数排序通过处理每一位数字进行排序&#xff0c;分为 LSD&#xff08;最低位优先&#xff09; 和 MSD&#xff08;最高位优先&#xff09; 两种方式。核心步骤&#xff1a; 确定最大值&#xff1a;计算数组中最大数的位数。逐位排序&am…

服务治理-服务发现和负载均衡

第一步&#xff1a;引入依赖 第二步&#xff1a;配置地址 改写购物车服务的代码 负载均衡成功实现。 假如有一个服务挂了&#xff0c;比如说8081&#xff0c;cart-service能不能正常访问&#xff0c;感知到。 再重新启动8081端口。 不管服务宕机也好&#xff0c;还是服务刚启动…

专题十六:虚拟路由冗余协议——VRRP

一、VRRP简介 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;虚拟路由冗余协议通过把几台设备联合组成一台虚拟的设备&#xff0c;使用一定的机制保证当主机的下一跳设备出现故障时&#xff0c;及时将业务切换到备份设备&#xff0c;从而保持通讯的连续性和…

UE5 关卡序列

文章目录 介绍创建一个关卡序列编辑动画添加一个物体编辑动画时间轴显示秒而不是帧时间轴跳转到一个确定的时间时间轴的显示范围更改关键帧的动画插值方式操作多个关键帧 播放动画 介绍 类似于Unity的Animation动画&#xff0c;可以用来录制场景中物体的动画 创建一个关卡序列…

openbmb/MiniCPM-V-2_6 和 AIDC-AI/Ovis2-1B 的网络结构体对比

openbmb/MiniCPM-V-2_6和Ovis2作为多模态大模型&#xff0c;在架构设计上既有共性也有显著差异。以下从核心模块、技术实现和任务适配三个维度展开对比分析&#xff1a; 一、核心模块架构对比 1. 视觉编码器 MiniCPM-V-2_6&#xff1a; 架构&#xff1a;基于SigLIP-400M轻量级…

鸿蒙学习笔记(5)-HTTP请求数据

一、Http请求数据 http模块是鸿蒙内置的一个模块&#xff0c;提供了网络请求的能力。不需要再写比较原始的AJAS代码。 ps:在项目中如果要访问网络资源&#xff0c;不管是图片文件还是网络请求&#xff0c;必须给项目开放权限。 &#xff08;1&#xff09;网络连接方式 HTTP数…

使用Redis5.X部署一个集群

文章目录 1.用Redis5.x来创建Cluste2. 查看节点信息 nodes3. 添加节点 add-node4.删除节点 del-node5.手动指定从节点 replicate6.检查集群健康状态 check 建议使用5.x版本。 首先&#xff0c;下载Redis&#xff0c;根据自己的环境选择版本。 一键启动Redis集群文件配置。 ech…