Safetensors是一种专为存储大型张量数据设计的文件格式,由Hugging Face团队开发,旨在提供安全高效的模型参数存储解决方案。下面将详细介绍Safetensors格式及其特点,并全面梳理当前主流的大模型文件格式。

一、Safetensors格式详解

1. 基本概念与设计背景

Safetensors是一种专为存储和加载大型张量(tensors)而设计的文件格式,文件扩展名通常为.safetensors。它解决了传统存储格式(如PyTorch的.pt/.pth文件)存在的几个关键问题:

  • 安全性问题:传统格式使用Python的Pickle模块进行序列化,可能在加载时执行任意代码,带来安全风险
  • 效率问题:处理极大规模模型时,传统格式的加载速度和内存效率可能成为瓶颈
  • 可移植性问题:不同框架和工具对模型文件格式的支持程度不一,导致跨平台共享复杂

2. 核心特性

Safetensors具有以下显著特点:

  • 安全性:采用纯二进制格式,不依赖Pickle序列化,避免了潜在代码执行风险
  • 高效性:支持零拷贝(zero-copy)加载和内存映射(memory mapping),显著提升大模型加载速度
  • 跨平台/跨框架:适用于PyTorch、TensorFlow等多种深度学习框架
  • 简洁性:文件结构简单明了,便于理解和实现

3. 文件结构

Safetensors文件采用精心设计的二进制格式,主要由以下几部分组成:

  • 头部信息(Header):包含文件元数据和校验信息,如格式版本、数据长度等
  • 张量索引表(Tensor Metadata):记录每个张量的名称、数据类型、形状和偏移量
  • 张量数据区(Tensor Data):实际存储张量数据的连续内存块

这种结构设计使得Safetensors能够快速定位特定张量,同时高效加载数据。

4. 使用示例

保存Safetensors文件
import torch
from safetensors.torch import save_file# 定义PyTorch模型权重
weights = {"weight1": torch.randn(3, 3), "weight2": torch.ones(5)}# 保存为safetensors格式
save_file(weights, "model.safetensors")
加载Safetensors文件
from safetensors.torch import load_file# 加载safetensors文件
loaded_weights = load_file("model.safetensors", device="cpu")for key, value in loaded_weights.items():print(f"{key}: {value}")
部分加载优化

对于大型模型,可以只加载需要的部分张量:

from safetensors import safe_openwith safe_open("model.safetensors", framework="pt", device=0) as f:tensor_slice = f.get_slice("embedding")vocab_size, hidden_dim = tensor_slice.get_shape()tensor = tensor_slice[:, :hidden_dim]

5. 优势与局限性

主要优势

  • 安全性高,避免恶意代码执行风险
  • 加载速度快,支持内存映射和零拷贝
  • 文件体积紧凑,存储效率高
  • 跨框架支持良好

局限性

  • 生态系统相对较新,社区支持不如传统格式广泛
  • 主要与PyTorch集成良好,对其他框架支持仍在完善
  • 不支持存储自定义对象和复杂结构

二、大模型主流文件格式全览

除了Safetensors外,当前大模型领域主要使用以下几种文件格式:

1. PyTorch原生格式(.pt/.pth)

  • 特点:PyTorch默认序列化格式,使用Python的Pickle模块,可保存完整模型结构或仅权重(state_dict)
  • 优点:与PyTorch生态无缝集成,灵活性高
  • 缺点:存在安全风险(反序列化漏洞),大文件加载较慢
  • 适用场景:PyTorch框架内的训练、微调和调试
  • 代表模型:Meta的Llama系列、通义千问(Qwen)等

2. GGUF格式

  • 特点:GGML的升级版,专为本地推理优化,支持元数据和灵活量化策略
  • 优点:加载速度快、内存占用低,支持多GPU和量化(如4-bit)
  • 缺点:主要面向CPU/本地推理,生态相对局限
  • 适用场景:边缘设备部署、低延迟本地应用
  • 代表工具:llama.cpp、alpaca.cpp

3. ONNX格式(.onnx)

  • 特点:开放神经网络交换格式,将模型转换为计算图形式
  • 优点:跨框架兼容性好,支持多硬件加速,推理性能高
  • 缺点:转换过程复杂,动态结构支持有限
  • 适用场景:跨框架部署、硬件加速推理
  • 代表运行时:ONNX Runtime

4. TensorFlow格式

包括多种子类型:

  • SavedModel:TensorFlow标准导出格式,包含完整模型
  • .ckpt:检查点格式,保存权重和训练状态
  • 优点:与TensorFlow生态深度集成
  • 缺点:依赖TensorFlow环境
  • 代表模型:Google的PaLM、BERT等

5. Hugging Face格式(.bin/.json)

  • 组成:

    • pytorch_model.bin:模型权重
    • config.json:模型结构配置
    • tokenizer.json:分词器配置
  • 优点:与Transformers库无缝集成

  • 缺点:文件体积较大

  • 适用场景:Hugging Face生态系统中的模型共享

6. HDF5格式(.h5)

  • 特点:通用科学数据存储格式,曾为Keras默认格式
  • 优点:跨平台兼容性好
  • 缺点:逐渐被其他格式取代
  • 适用场景:科研存档和兼容性要求高的场景

三、主流格式对比与选型建议

1. 关键特性对比表

格式量化支持安全性跨框架加载速度适用场景代表模型/工具
Safetensors部分安全敏感部署、开源共享Hugging Face生态模型
GGUF极快本地/边缘推理Llama系列、alpaca.cpp
PyTorch(.pt)中等PyTorch训练/调试Llama, Qwen
ONNX跨框架/硬件加速多框架转换模型
TensorFlow中等TensorFlow生态PaLM, BERT
HF(.bin)部分中等Hugging Face生态Transformers库模型

2. 选型建议

根据具体需求选择最合适的格式:

  1. 安全优先:选择Safetensors,避免生产环境中的代码注入风险
  2. 本地推理:GGUF凭借内存映射和量化支持,适合资源受限的边缘设备
  3. 跨框架部署:ONNX或Safetensors提供良好的跨框架兼容性
  4. 框架绑定:根据主要使用的深度学习框架选择原生格式(如PyTorch→.pt, TensorFlow→SavedModel)
  5. 长期存储:优先使用标准化格式(Safetensors或GGUF),避免技术迭代导致的兼容性问题

四、技术发展趋势

大模型文件格式的发展呈现以下趋势:

  1. 安全性提升:Safetensors等安全格式逐渐取代存在风险的Pickle序列化格式
  2. 量化技术普及:GGUF等支持量化的格式在边缘计算中广泛应用
  3. 跨框架兼容性:ONNX和Safetensors等格式推动模型在不同框架间的无缝迁移
  4. 加载效率优化:零拷贝、内存映射等技术显著提升大模型加载速度

随着大模型技术的不断发展,文件格式的选择将更加注重安全性、效率与跨平台兼容性的平衡。Safetensors作为新兴的安全高效格式,正在获得越来越广泛的应用,有望成为未来大模型存储的主流格式之一。

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

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

相关文章

分布式理论:CAP、Base理论

目录 1、CAP理论 1.1、介绍 1.2、CAP的三种选择 1.3、CAP的注意事项 2、BASE理论 2.1、定义介绍 2.2、最终一致性的介绍 2.3、BASE的实现方式 2.4、与ACID的对比 3、CAP与BASE的联系 4、如何选择CAP 前言 在分布式系统中,CAP理论和BASE理论是指导系统设计…

【最新】飞算 JavaAl安装、注册,使用全流程,让ai自己给你写代码,解放双手

目录 飞算 JavaAl 产品介绍 安装飞算 JavaAl 第一步:点击 File->Setting 第二步:点击 Plugins 第三步:搜索 CalEx-JavaAI 第四步:点击 Install 进行安装 第五步:点击 Install ,查看安装好的飞算…

无人设备遥控器之姿态控制算法篇

无人设备遥控器的姿态控制算法通过传感器数据融合、控制算法优化和执行机构调节实现动态平衡,核心算法包括PID控制、自适应控制、模型预测控制(MPC),以及数据融合中的互补滤波和卡尔曼滤波,同时涉及四元数算法和深度强…

【加解密与C】Base系列(三)Base85

Base85 编码简介 Base85(也称为 Ascii85)是一种二进制到文本的编码方案,用于将二进制数据转换为可打印的ASCII字符。它的效率高于Base64,但生成的字符串可能包含特殊字符(如引号或反斜杠),需在…

Docker企业级应用:从入门到生产环境最佳实践

一、Docker核心概念与架构 1.1 Docker技术栈 #mermaid-svg-CUEiyGo05ZYG524v {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CUEiyGo05ZYG524v .error-icon{fill:#552222;}#mermaid-svg-CUEiyGo05ZYG524v .error-te…

8、保存应用数据

目录用户首选项的使用用户首选项主要API用户首选项开发流程用户首选项开发实践关系型数据库的使用关系型数据库工作流程关系型数据库开发实践用户首选项的使用 用户首选项主要API 用户首选项开发流程 成功的获取了一个名为myStore的Preferences实例 保存了一个键值对&#x…

(C++)list列表相关基础用法(C++教程)(STL库基础教程)

源代码&#xff1a;#include <iostream> #include <list>using namespace std;int main(){list<int> numbers{10,20,30};numbers.push_front(5);numbers.push_back(40);auto it numbers.begin();advance(it,2);numbers.insert(it,15);cout<<"该列…

Spring CGLIB私有方法访问成员变量为null问题

场景 代码 RestController public class TestJob {Autowiredprivate XxService xxService;XxlJob("testCGLIB")private void doTest(){System.out.println("方法调用");System.out.println("成员变量注入:"(xxService!null));this.doInnerTest()…

Paimon本地表查询引擎LocalTableQuery详解

LocalTableQueryLocalTableQuery 是 Paimon 中实现本地化、带缓存的表查询的核心引擎。它的主要应用场景是 Flink 中的 Lookup Join。当 Flink 作业需要根据一个流中的 Key 去关联一个 Paimon 维表时&#xff0c;LocalTableQuery 可以在 Flink 的 TaskManager 节点上&#xff0…

使用协程简化异步资源获取操作

异步编程的两种场景 在异步编程中&#xff0c;回调函数通常服务于两种不同场景&#xff1a; 一次性资源获取&#xff1a;等待异步操作完成并返回结果。持续事件通知。监听并响应多个状态变更。 Kotlin为这两种场景提供了解决方案&#xff1a;使用挂起函数简化一次性资源获取…

ABP VNext + Cosmos DB Change Feed:搭建实时数据变更流服务

ABP VNext Cosmos DB Change Feed&#xff1a;搭建实时数据变更流服务 &#x1f680; &#x1f4da; 目录ABP VNext Cosmos DB Change Feed&#xff1a;搭建实时数据变更流服务 &#x1f680;TL;DR ✨&#x1f680;1. 环境与依赖 &#x1f3d7;️2. 服务注册与依赖注入 &…

STM32-定时器

定时器&#xff1a;有4个独立通道&#xff1a;输入捕获&#xff1b;输出比较PWM生成&#xff1b;单脉冲模式输出&#xff1b;可通外部信号控制定时器&#xff08;TIMx-ETR&#xff09;&#xff1b;支持针对定时的增量&#xff08;正交&#xff09;编码器、霍尔传感器电路通用定…

Windows Server 2019--职业技能大赛B模块Windows服务器配置样题

一、赛题说明 &#xff08;一&#xff09;竞赛介绍 请详细阅读网络拓扑图&#xff0c;为所有计算机修改默认防火墙以便允许ICMP和相应的流量&#xff0c;不允许直接关闭主机的防火墙。除了CD-ROM/HDD驱动器&#xff0c;请不要修改虚拟机本身的硬件设置。 &#xff08;二&…

vue3+Echarts实现立体柱状图

Echarts柱状图中文网&#xff1a;https://echarts.apache.org/examples/zh/index.html#chart-type-bar 效果展示&#xff1a; 主要实现过程是三部分的组合&#xff0c;最上面是一个椭圆&#xff0c;中间是正常的柱子&#xff0c;下方再加上一个椭圆&#xff0c;就出来立体的效…

【UE5】虚幻引擎小百科

一、类名前面的大写字母的含义是什么UE5常见前缀分类表前缀含义实例用于AActorACharacter&#xff0c;AWeaponBase可放入世界中的对象&#xff08;有位置、可碰撞等&#xff09;UUObject派生类UUserWidget&#xff0c;UWeaponComponent引擎对象、逻辑模块&#xff0c;不具备Tra…

【Linux系统】vim编辑器 | 编译器gcc/g++ | make/Makefile

1. vim编辑器一、历史发展与Vim vs Vi的区别起源与演进Vi&#xff08;1976年&#xff09; &#xff1a;由Bill Joy开发&#xff0c;嵌入BSD Unix系统&#xff0c;是首个面向屏幕的文本编辑器&#xff0c;但功能有限&#xff08;如无多级撤销&#xff09;。Vim&#xff08;1991年…

国产飞腾主板,赋能网络安全防御硬手段

​ 当前&#xff0c;网络安全形势严峻&#xff0c;网络攻击手段不断翻新&#xff0c;从数据泄露到电脑中毒&#xff0c;企业、机构乃至国家的数字资产都面临着巨大风险。在此背景下&#xff0c;国产硬件技术的突破对筑牢网络安全防线意义重大。 高能计算机基于市场需求&#…

Spring AI 概述与架构设计

目录一、前言二、简介三、核心能力概览四、理解模块架构图五、模型适配能力六、最小应用示例七、与传统 LLM 调用相比八、总结九、参考一、前言 在 AI 正以前所未有的速度“下沉”到各类系统与业务的当下&#xff0c;Spring 官方推出的 Spring AI 项目&#xff0c;为 Java 开发…

UI前端与数字孪生融合新领域:智慧环保的污染源监测与治理

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言&#xff1a;数字孪生重构智慧环保的技术范式在环境污染治理压力持续增大的背景下&…

【go/wails】wails入门系列(一)环境安装与demo

文章目录说在前面go安装nodejs安装wails创建项目运行说在前面 操作系统&#xff1a;win11go版本&#xff1a;1.24.4nodejs版本&#xff1a;v22.16.0wails版本&#xff1a;v2.10.1 go安装 官网 这里 下载安装即可 nodejs 官网 这里 下载安装即可 安装wails 设置go国内代理g…