现代主流/安全优化格式(新生态)
safetensorsHugging Face主导背景目前AI绘画Stable Diffusion、ComfyUI和主流大模型最推荐的格式。详细说明核心特点100%安全它只包含纯粹的张量数据模型权重和一小段描述结构的JSON文本没有任何可执行代码完全免疫了传统格式的木马病毒风险。性能支持零拷贝Zero-copy和内存映射mmap加载速度极快远超旧格式。使用场景SD/SDXL/Flux模型的Checkpoint、LoRA、ControlNet以及大语言模型权重。2 gguf背景替代了早期的ggml格式是目前端侧/本地大模型LLM量化的绝对霸主。详细说明核心特点将模型的所有组件权重、分词器、超参数、元数据封装在单个文件内。它的扩展性极强支持未来添加新的元数据而不破坏向后兼容性。量化优势专门为CPU/GPU混合推理优化支持各种强度的量化如Q4_K_M、Q8_0能让几百亿参数的大模型在消费级显卡甚至手机、MacBook上流畅运行。适用场景Llama3、Gemma、Qwen等大语言模型的本地部署最近ComfyUI也开始流行用GGUF格式来运行轻量化的Flux或SDXL模型。1.2 传统开发/原生框架格式多见于训练与研究这类格式通常伴随官方框架诞生虽然灵活但在跨平台部署或安全性上存在一定局限。1 pth/ptPyTorch详细说明核心特点PyTorch框架的原生存储格式它基于PyTorch的pickle模块进行序列化。优缺点它极其灵活不仅能保存模型权重还能把训练了一半的优化器状态Optimizer、Epoch轮数甚至网络结构代码一起存进去是模型训练和微调的标配。但缺点是不安全加载恶意的pth文件可能会在电脑上自动执行破坏性代码。适用场景AI绘画中的早期特定模型如部分ControlNet、ESRGAN放大算法模型、PyTorch算法开发与训练。2 ckptCheckpoint背景这是Stable Diffusion早期1.5时代最常用的格式本质上和pth一样也是基于pickle序列化。详细说明核心特点由于存在和pth一模一样的安全漏洞可注入恶意脚本目前在生图领域已经全面被safetensors淘汰。如果你在网上下载到老的ckpt权重建议用工具转换成safetensors再使用。3 h5/keras/pb (TensorFlow/Keras)背景Google生态TensorFlow下的主流格式。详细说明核心特点h5HDF5多用于保存Keras模型的权重或完整结构pbProtocol Buffers则是TensorFlow用于生产端部署的图模型格式。适用场景传统计算机视觉如某些老的人脸识别、目标检测算法和工业级TensorFlow工业管线。1.3 夸平台推理与硬件加速格式生产端部署当模型训练完成后为了让它在手机、网页、或者不同显卡英伟达、AMD、Intel上跑得飞快通常会转换成以下格式。1 onnxOpen Neural Network Exchange详细说明核心特点“通用翻译官”由微软、Meta等联合发起的开放标准。它把模型结构抽象成一张通用的计算图让你可以把PyTorch训练的模型无缝转换到TensorFlow或其他推理引擎中运行。适用场景跨平台部署比如你在ComfyUI里用到的某些WD14自动打标插件、LayerDiffusion背景分离模型很多底层都在跑ONNX格式因为它在CPU或非英伟达显卡上的兼容性极好。2 engineNVIDIA TensorRT背景英伟达官方对自家显卡进行极致硬件加速的专用格式。详细说明核心特点速度榨干者你必须在自己的显卡上把onnx或safetensors现场“编译”成 engine 格式。它会根据你当前的显卡架构如RTX 4090进行剪枝、层融合和量化加速。优缺点速度达到物理极限通常比原模型快 50%~100%。但完全没有通用性在4090上编译的engine文件拿到3080上是用不了的甚至显卡驱动升级了都可能需要重新编译。适用场景追求极致生图速度的WebUI/ComfyUI TensorRT加速工作流或工业级实时AI推理。3 tflite/onnxruntime (移动端轻量化)背景tflite是TensorFlow Lite格式专门给安卓、iOS手机或嵌入式设备如树莓派使用做了极端的体积压缩和定点量化。1.4 总结在实际生产应用时模型包含训练和部署两大关键环节在训练环节模型可通过不同框架来实现典型如PyTorch、TensorFlow等由于框架的不同会产生不同格式的训练模型而在部署环节由于硬件平台的不同又需要需要将不同格式的模型进行差异化修改这种多到多的操作实施起来很繁琐。经过工业界和学术界数年的探索模型部署有了一条流行的流水线image如上图为了让模型最终能够部署到某一环境上开发者们可以使用任意一种深度学习框架来定义网络结构并通过训练确定网络中的参数。之后模型的结构和参数会被转换成一种只描述网络结构的中间表示一些针对网络结构的优化会在中间表示上进行。最后用面向硬件的高性能编程框架(如 CUDAOpenCL编写能高效执行深度学习网络中算子的推理引擎会把中间表示转换成特定的文件格式并在对应硬件平台上高效运行模型比如中间表示ONNX转换支持华为芯片推理的OM文件。2 模型导出及格式转换2.1 导出pth格式模型在上一篇文章中源码trainNN.py已经导出mnist_cnn.pth模型文件PyTorch使用Python原生pickle序列化任意Python对象模型、张量、字典、优化器、数字、自定义类等这是pth文件的核心。pickle可执行任意代码所以处于安全考虑不要加载来源不明的pt文件Torch 2.0提供weights_onlyTrue安全加载模式仅读取张量、禁止反序列化Python对象。新版PyTorch默认开启_use_new_zipfile_serializationTruepth本质是一个zip压缩包旧版本是纯二进制pickle文件无压缩。对于新版pt文件可以直接用unzip model.pt解压查看内部文件。如解压后内容如下1 目录及文件解释versionpickle序列化协议版本pickle4/pickle5用于版本兼容校验.format_versionTorch自定义ZIP存储格式版本区分新旧存储结构版本不匹配会直接加载失败.storage_alignment张量二进制存储内存对齐字节数GPU/CPU加载时用来对齐内存提升张量读取速度一般是1或64byteorder存储硬件字节序x86机器固定是little小端序用来解析.storage里的浮点/整数二进制data.pkl整个模型的逻辑骨架用pickle序列化了checkpoint /state_dict字典但只存张量的「描述信息」不存权重数字data目录下存储张量权重二进制数据.data该目录可能是特定场景如torch.package/export的残留或误生成2 data.pkl详解直接用UE打开该二进制文件内容如下image在VS Code中安装PKL Viewer扩展也一并打开该文件进行分析内容如下复制代码1 0: \x80 PROTO 22 2: c GLOBAL ‘collections OrderedDict’3 27: q BINPUT 04 29: ) EMPTY_TUPLE5 30: R REDUCE6 31: q BINPUT 17 33: ( MARK8 34: X BINUNICODE ‘features.0.weight’9 56: q BINPUT 210 58: c GLOBAL ‘torch._utils _rebuild_tensor_v2’11 91: q BINPUT 312 93: ( MARK13 94: ( MARK14 95: X BINUNICODE ‘storage’15 107: q BINPUT 416 109: c GLOBAL ‘torch FloatStorage’17 129: q BINPUT 518 131: X BINUNICODE ‘0’19 137: q BINPUT 620 139: X BINUNICODE ‘cuda:0’21 150: q BINPUT 722 152: M BININT2 28823 155: t TUPLE (MARK at 94)24 156: q BINPUT 825 158: Q BINPERSID26 159: K BININT1 027 161: ( MARK28 162: K BININT1 3229 164: K BININT1 130 166: K BININT1 331 168: K BININT1 332 170: t TUPLE (MARK at 161)33 171: q BINPUT 934 173: ( MARK35 174: K BININT1 936 176: K BININT1 937 178: K BININT1 338 180: K BININT1 139 182: t TUPLE (MARK at 173)40 183: q BINPUT 1041 185: \x89 NEWFALSE42 186: h BINGET 043 188: ) EMPTY_TUPLE44 189: R REDUCE45 190: q BINPUT 1146 192: t TUPLE (MARK at 93)47 193: q BINPUT 1248 195: R REDUCE49 196: q BINPUT 1350 198: X BINUNICODE ‘features.0.bias’51 218: q BINPUT 1452 220: h BINGET 3复制代码最一开始是由Pickle规范PEP307/PEP574)规定的0x80PROTO头声明了本次序列化使用的Pickle协议版本0x80后紧跟1字节参数不是协议号本身而是有对应的映射表image随后的二进制流可以通过Python标准库的pickletools模块来查看包含所有协议版本的完整指令对照表源码内带详细注释说明每个指令的作用该文件路径可以通过以下代码获取python -c “import pickletools; print(pickletools.file)”也可以通过如下文件直接打印出相应对照表printpkl.py该文件运行输出内容如下image接下来继续结合PKL Viewer解析结果进行分析第2行内容等价于python代码collections.OrderedDict把该类压入到Pickle栈此时栈为[OrderedDict]第3行内容表示将OrderedDict类缓存到memo表即memo[0] class ‘collections.OrderedDict’第4行将空元组压入栈此时栈为[OrderedDict, ()]第5行REDUCE的含义是callable(args)对应的代码是弹出参数空元组及类并调用类实现OrderedDict(())之后将结果及用OrderedDict类构造一个空实例对象压入到栈此时栈为[ordereddict实例]第6行保存对象到memo表即memo[1] OrderedDict()此时实际上已经得到state_dict OrderedDict()此时在memo表中分别存储了类及其实例对象后续可根据需要进行复用。接下来代码开始向OrderedDict插入元素第7行向栈插入MARK分隔符用于标记一个可变长度对象的开始位置第8行向栈压入一个Unicode字符串对象后续它将作为key第9行将字符串存入到memo表第10行向栈中压入_rebuild_tensor_v2重建函数此时栈内容为[OrderedDict(), MARK33, ‘features.0.weight’, ‘_rebuild_tensor_v2’]第11行将其存入到memo表第1213行两次将MARK压入到栈第14~22行依次将“storage”FloatStorage“0”“cuda:0”288入栈最终由第23行的TUPLE和最近MARK94产生元组对象并入栈此时栈内容为[OrderedDict(), MARK33, ‘features.0.weight’, ‘_rebuild_tensor_v2’, MARK93, (“storage”, FloatStorage, “0”, “cuda:0”, 288)]第25行BINPERSID会调用unpickler.persistent_load(pid)来真正从data/0中的数据实现Storage对象这里正是结构和数据分别存放的精华所在例如这里weight数据288个float数据总大小为1152字节和data/0文件大小正好对应上image此时栈内容为[OrderedDict(), MARK33, ‘features.0.weight’, ‘_rebuild_tensor_v2’, MARK93, FloatStorage(288)]而_rebuild_tensor_v2函数的参数定义如下复制代码_rebuild_tensor_v2(storage,storage_offset,size,stride,requires_grad,backward_hooks)复制代码可见第2个参数是storage_offset就是说生成Tensor时不一定从Storage的开头开始而是可以从指定storage_offset下标开始这正好对应源码中第26行内容这里向栈中压入下标0接下来第2732行给出_rebuild_tensor_v2函数的第3个参数size(32,1,3,3)即weight形状是32x1x3x3正好是288个元素再接下来第3439行给出函数第4个参数stride(9, 9, 3, 1)即stride[0]1339stride[1]3*39stride[2]3stride[3]1随后第41行向栈中压入False值对应参数requires_grad之后第42~44先通过BINGET 0将之前memo中预存的OrderedDict类压栈然后再将空元组压栈之后通过REDUCE实例化OrderedDict对象作为参数backward_hooks的值最终通过第46行的和MARK93闭合产生参数元组并在48行完成_rebuild_tensor_v2函数调用产生tensor实例。接下来过程类似最终栈内容大致如下复制代码OrderedDict()MARK33“features.0.weight”Tensor(…)“features.0.bias”Tensor(…)“features.1.weight”Tensor(…)复制代码各个元素初始化完毕后最终会通过SETITEMS完成OrderedDict对象赋值该指令会把最近MARK后的所

相关新闻

下班忘开电脑传文件?局域网 MAC 远程唤醒,关机状态一键开机

下班忘开电脑传文件?局域网 MAC 远程唤醒,关机状态一键开机

很多企业运维、设计办公、机房管理人员都会遇到一个麻烦场景:需要调取另一台电脑里的工程文件、备份数据,但是目标主机已经关机,只能专程走到设备面前手动开机,多设备管理时来回奔波格外耗费时间。不少人听说过局域网网络唤醒功能…

2026/7/20 19:03:05 阅读更多 →
S3C2440 GPIO操作与Linux驱动开发详解

S3C2440 GPIO操作与Linux驱动开发详解

1. S3C2440 GPIO操作基础解析在嵌入式Linux开发中,GPIO(通用输入输出)是最基础也最常用的外设接口之一。S3C2440作为三星经典的ARM9处理器,其GPIO子系统在Linux内核中有完整的支持框架。不同于裸机开发中直接操作寄存器的方式&…

2026/7/20 19:03:05 阅读更多 →
Linux LCD驱动移植与帧缓冲技术详解

Linux LCD驱动移植与帧缓冲技术详解

1. Linux LCD驱动移植概述LCD驱动移植是嵌入式Linux开发中的一项基础但关键的工作。作为一名在嵌入式领域摸爬滚打多年的工程师,我处理过各种LCD面板的驱动适配工作。LCD驱动本质上是一个字符设备驱动,它负责将内核中的图形数据正确地输出到物理显示屏上…

2026/7/20 19:03:05 阅读更多 →

最新新闻

kafka broker不设置分区key,会将同一topic的消息存放到不同的分区,但读取数据不能将不同分区的数据一次性查询出来怎么解决

kafka broker不设置分区key,会将同一topic的消息存放到不同的分区,但读取数据不能将不同分区的数据一次性查询出来怎么解决

在使用Apache Kafka时,如果不设置分区键(partition key),Kafka 会根据消息的键(key)或消息本身的内容来决定将消息发送到哪个分区。如果没有指定消息的key,Kafka通常会采用默认的分区策略&#…

2026/7/22 0:32:40 阅读更多 →
flink rocksdb 配置memtable大小

flink rocksdb 配置memtable大小

在使用Apache Flink的RocksDBStateBackend时,配置RocksDB的memtable大小是一个常见的需求,特别是在处理大规模状态数据时。RocksDB的memtable是用来存储键值对数据,直到它们被写入到磁盘上的SSTable文件中的。调整memtable的大小可以影响状态…

2026/7/22 0:32:40 阅读更多 →
HarmonyOS应用开发实战:小事记 - @Link 与 @Prop 双向同步:父子组件状态协调的深层原理

HarmonyOS应用开发实战:小事记 - @Link 与 @Prop 双向同步:父子组件状态协调的深层原理

前言 在 ArkUI 中,Link 和 Prop 都用于父子组件间的数据传递,但它们的同步方向和使用场景不同。Prop 是单向的(父 → 子),而 Link 是双向同步的。本文以小事记(xiaoshiji_ohos_app) 的组件扩展…

2026/7/22 0:31:39 阅读更多 →
draw.io桌面版终极指南:完全免费的跨平台图表工具

draw.io桌面版终极指南:完全免费的跨平台图表工具

draw.io桌面版终极指南:完全免费的跨平台图表工具 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop 还在为昂贵的图表软件发愁吗?想要一款真正免费、功能强…

2026/7/22 0:30:39 阅读更多 →
台湾阳明交通大学攻克事件相机视频重建难题

台湾阳明交通大学攻克事件相机视频重建难题

这项由台湾阳明交通大学多位研究人员联合完成的研究,发表于2026年7月的SIGGRAPH Conference Papers(会议时间为2026年7月19日至23日,在美国洛杉矶举行),论文编号为DOI 10.1145/3799902.3811151,arXiv编号26…

2026/7/22 0:29:38 阅读更多 →
当AI开始“懂病“:伊斯法罕医科大学打造会“对症下药“的分子设计师

当AI开始“懂病“:伊斯法罕医科大学打造会“对症下药“的分子设计师

这项由伊斯法罕医科大学再生医学研究中心、伊斯法罕神经科学研究中心、药物化学系、心血管研究中心、遗传与分子生物学系及生物信息学研究中心联合开展的研究,于2026年7月9日以预印本形式发布于arXiv平台,编号为arXiv:2607.08404。感兴趣的读者可通过该编…

2026/7/22 0:29:38 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 8:48:31 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 8:25:39 阅读更多 →

月新闻