现代主流/安全优化格式(新生态) 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后的所

相关新闻

最新新闻

使用 Cloud Canal 将 MySQL数据同步至 ElasticSearch

使用 Cloud Canal 将 MySQL数据同步至 ElasticSearch

项目版本与运行环境 JDK 版本:21操作系统:Windows 11虚拟机系统 AnolisOS_Mini_8.10MySQL 版本:8.4.5ElasticSearch 版本:8.18.8Cloud Canal 版本:6.2.0.1 配置环境 安装 Cloud Canal Cloud Canal 官网安装教程&am…

2026/7/22 6:27:10
English Writing Coach skill — 生产级 AI 英文写作教练的设计与实现

English Writing Coach skill — 生产级 AI 英文写作教练的设计与实现

一、项目背景 目标是做一个真正能落地的英文写作教练——不是玩具级 demo,而是能处理真实教学场景的生产级 Skill。 二、技术架构 SKILL.md (控制流 DETECT→LOAD→EXECUTE→RENDER→CHECK)├── knowledge/ (6 个知识文件, P0/P1/P2 优先级加载)│ ├── sa…

2026/7/22 6:27:10
五款电脑端二维码工具深度实测:从设计到批量,找到你的效率利器

五款电脑端二维码工具深度实测:从设计到批量,找到你的效率利器

1. 从“到处找”到“随手做”:为什么你需要一个固定的二维码工具每次需要生成一个二维码,你的第一反应是什么?是打开浏览器,在搜索框里输入“二维码生成器”,然后从一堆广告和良莠不齐的网站里挑一个?还是翻…

2026/7/22 6:27:10
上门寄养宠物小程序哪家靠谱,订单时段冲突拦截方案

上门寄养宠物小程序哪家靠谱,订单时段冲突拦截方案

上门寄养宠物小程序哪家靠谱,订单时段冲突拦截方案 上门宠物寄养、上门喂养属于分时预约类本地生活服务,所有服务都严格依托固定上门时间段开展。靠谱的上门寄养宠物小程序,除了基础的下单、展示、支付功能,核心考核标准就是订单…

2026/7/22 6:27:10
sensor问题与解决记录

sensor问题与解决记录

1、sc350 10bit出图全灰屏问题。解决:10bit初始化序列里曝光时间太短导致取出来的图是灰屏,增加曝光时间后,取图正常。2、sc350 12bit出图花屏问题。解决:之前采用25MHz外部晶振的方式提供频率,使用12bit初始化序列取出…

2026/7/22 6:27:10
Cocos Creator场景树与节点架构:游戏开发的核心组织逻辑

Cocos Creator场景树与节点架构:游戏开发的核心组织逻辑

1. 项目概述:从“积木”到“舞台”如果你刚开始接触 Cocos Creator,可能会觉得“场景树”和“节点”这两个词有点抽象。别急,让我用一个更形象的比喻来解释:你可以把整个游戏世界想象成一个巨大的、立体的舞台剧。在这个舞台上&am…

2026/7/22 6:22:10

月新闻