这些文件格式本质上都是用于存储训练好的模型参数(权重和偏置) 的序列化文件。它们的核心区别在于:序列化协议、包含的额外信息、安全性、加载效率以及跨平台兼容性。

1、.safetensors 文件
来源与定义:
由 Hugging Face 公司开发和推广的一种新兴、现代、安全且高效的模型存储格式。旨在解决 .pth/.bin 格式的安全和性能问题。
内容:仅包含模型的权重张量,不包含任何代码。使用一种自定义的、简单的文件格式,通常基于 JSON 头文件来描述张量的元数据(形状、数据类型等)

优势:
安全性:最大的优点。格式设计上就不允许包含或执行代码,从根本上消除了反序列化攻击的风险。可以安全地加载来自任何来源的模型。
加载速度极快:由于张量数据在磁盘上的布局与在内存(尤其是GPU内存)中的布局非常相似,可以实现零拷贝加载,速度比 pickle 快得多(官方称可达快100倍)。
跨框架兼容:格式简单明了,易于被不同框架解析。已有PyTorch, TensorFlow, JAX, NumPy等的原生支持库。
惰性加载:可以仅加载部分权重(例如,只加载某个LoRA适配器),而无需将整个大文件读入内存,对超大模型非常友好。

劣势:
功能单一:只存储权重,不存储优化器状态等训练信息(但这通常被视为一种优点,职责分离更清晰)。

主要应用场景:
模型分发与共享:Hugging Face Model Hub 强烈推荐使用此格式上传模型,确保下载者的安全。
生产环境推理:尤其是需要快速冷启动的场景。
任何对安全和性能有要求的场景,正在迅速成为社区的新标准。

.pth 文件 (PyTorch Tensor)
来源与定义:
源自 PyTorch 框架。.pth 是 PyTorch 使用 torch.save() 函数进行序列化的默认文件扩展名。它并非一种专门的“格式”,而更像一个约定俗成的扩展名。其内部实际上是 Python 的 pickle 序列化格式,用于打包存储张量(Tensors)和其他Python对象(如整个模型结构)。

内容:
通常有两种保存方式:
只保存模型状态字典(State Dict):这是推荐的做法。只包含模型的可学习参数(权重和偏置),不包含模型类定义本身。文件较小。

torch.save(model.state_dict(), 'model_weights.pth')

保存整个模型:使用 torch.save(model, ‘entire_model.pth’)。这会序列化整个模型对象,包括其结构定义(通过pickle记录模型类的路径)。这种方法不推荐,因为它对代码结构依赖性强,容易在模型类定义改变后无法加载。

优势:

原生支持:PyTorch 生态系统的默认选择,加载简单(torch.load())。

灵活:可以保存不仅仅是模型参数,还可以是优化器状态、训练进度、自定义数据等任何可以被pickle的对象。

劣势与风险:

安全风险:由于依赖Python的 pickle 模块,而 pickle 在执行反序列化时会自动执行代码。这意味着加载来自不信任来源的 .pth 文件可能带来严重的安全漏洞(如执行恶意代码)。

兼容性:保存整个模型的方式严重依赖特定的Python环境和类定义,移植性较差。

主要应用场景:

PyTorch 模型的训练检查点(Checkpoint)。在训练过程中定期保存,以便从中断处恢复训练。

在已知且可信的开发环境中,进行模型推理或继续训练。

.ckpt 文件 (Checkpoint)
来源与定义:

.ckpt 是 “Checkpoint”的缩写,并非某个框架的专属格式。它常见于 TensorFlow 和 PyTorch 的某些高级库(如pytorch-lightning)。

在 TensorFlow 1.x 时代,它通常指代一组由 tf.train.Saver() 创建的文件(包括 .data, .index, .meta)。

在现代深度学习中,它更多地被用作一个概念,指代一个包含恢复训练所需全部信息的包。

内容:

一个完整的检查点通常包含不止模型参数,还可能包括:

模型权重(相当于一个 .pth 的 state dict)。

优化器的状态(用于恢复训练时的动量、自适应学习率等)。

当前的epoch数、学习率调度器的状态、随机数生成器状态等。

其他自定义信息(如训练/验证损失历史)。

优势:

功能完整:提供了从精确点恢复训练的一切所需,而不仅仅是模型推理。

劣势:

文件较大:因为包含了额外状态信息。

格式不统一:不同框架或库生成的 .ckpt 文件内部结构可能不同。

主要应用场景:

模型训练过程中的快照。当训练过程需要数天甚至数周时,定期保存 .ckpt 至关重要。

例如,Hugging Face Transformers 库和 PyTorch Lightning 库都常用 .ckpt 作为检查点文件的扩展名。

.bin 文件 (Binary)
• 来源与定义:
◦ .bin 是一个通用的“二进制”文件扩展名。在深度学习语境下,它通常被 Hugging Face Transformers 库用作 PyTorch 模型权重文件的扩展名,其本质与只保存了 state dict 的 .pth文件完全相同。
• 内容:
◦ 就是通过 torch.save(model.state_dict(), …) 生成的 pickle 文件,只是扩展名不同。
• 优势/劣势:
◦ 与上述 .pth (state dict only) 格式完全一致。拥有同样的灵活性和同样的安全风险。
• 主要应用场景:
◦ 在 Hugging Face Transformers 库中,当你使用 save_pretrained() 方法保存一个PyTorch模型时,默认生成的权重文件就是 pytorch_model.bin。
◦ 它是 .safetensors 普及之前,Hugging Face 生态中的主流权重格式。

.gguf 文件 (GPT-Generated Unified Format)
来源与定义:
由 Georgi Gerganov 的 llama.cpp 项目创建,是其前身 .ggml 格式的进化版。专为在消费级硬件(CPU)上高效推理大语言模型而设计。它是一个高度量化优化和硬件友好的格式。

内容:
包含模型的权重,但这些权重通常被量化(如从FP16量化到4-bit整数),以大幅减小模型体积。
包含推理所需的全部超参数和词汇表。
文件结构经过精心设计,允许单文件分发和快速映射加载。

优势:
极致轻量化:通过量化,可将70B参数的模型从140GB+压缩到40GB以下,使其能在高端消费级CPU和笔记本电脑上运行。
推理高效:格式与 llama.cpp 等推理引擎深度结合,在CPU上能达到极佳的推理速度。
单文件便携:所有内容都在一个文件里,易于下载和管理。
跨平台:可以在x86, ARM(苹果M系列、树莓派)等多种CPU架构上运行。
劣势:
精度损失:量化会带来一定的模型性能(准确性)下降。
特定于推理:仅用于推理,不能用于继续训练。
生态相对特定:主要围绕 llama.cpp 及其衍生项目(如text-generation-webui)。
主要应用场景:
在边缘设备(CPU)上部署和运行LLM。例如,在MacBook、WindowsPC、手机甚至树莓派上本地运行LLaMA、Mistral等模型。
追求轻量级和快速推理的实验与个人使用。

在这里插入图片描述

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐