.pt / .pthpickle 协议的序列化格式,支持完整的 Python 对象图序列化。state_dict(模型权重)、优化器状态、训练超参数、模型配置等。torch.load() 加载,支持 map_location 参数进行设备映射。pickle,加载时会执行任意 Python 代码,存在代码注入风险。.bin.bin 文件(如 pytorch_model.bin)本质上是 .pt 格式的重命名版本,内容格式完全相同。from_pretrained() 方法自动识别和加载,支持自动分片加载。pytorch_model.bin、training_args.bin 等标准命名规范。.ckpt.ckpt.index:张量名称与数据文件分片的映射索引表。.ckpt.data-*:保存模型权重的二进制数据文件(可能多个分片)。.ckpt.meta(TF 1.x):计算图的 Protocol Buffer 定义。tf.train.Checkpoint API 加载。.pb(SavedModel 格式)• 格式特性:TensorFlow 的标准部署格式,包含完整的计算图结构与变量值。
• 目录结构:
saved_model/
├── saved_model.pb # 图定义
├── variables/ # 权重目录
│ ├── variables.index
│ └── variables.data-*
└── assets/ # 附加资源(可选)
• 推理独立性:无需模型源码,可直接在 TensorFlow Serving、TensorFlow Lite 中使用。
• 签名机制:支持多个 serving_default 签名,用于版本管理与接口绑定。
.safetensors.bin 格式。.onnx(Open Neural Network Exchange)opset_version 管理算子版本与兼容性(当前主流为 opset 11-17)。.gguf(GPT-Generated Unified Format).trt / .engine(TensorRT 格式).engine 文件与生成时的 GPU 型号、CUDA 版本、TensorRT 版本强绑定。.tflite(TensorFlow Lite).mlmodel / .mlpackage(Apple Core ML).mlmodel(单文件)→ .mlpackage(目录结构,支持大模型)。对于超过单文件系统限制或网络传输限制的大模型(通常 > 2GB),采用分片存储机制:
• 分片命名规范:
pytorch_model-00001-of-00005.bin
pytorch_model-00002-of-00005.bin
pytorch_model-00003-of-00005.bin
pytorch_model-00004-of-00005.bin
pytorch_model-00005-of-00005.bin
• 索引文件结构(pytorch_model.bin.index.json):
{
"metadata":{
"total_size":13231323136,
"format":"pt"
},
"weight_map":{
"model.embed_tokens.weight":"pytorch_model-00001-of-00005.bin",
"model.layers.0.self_attn.q_proj.weight":"pytorch_model-00001-of-00005.bin",
"model.layers.0.self_attn.k_proj.weight":"pytorch_model-00002-of-00005.bin",
...
}
}
• Safetensors 分片:
{
"metadata": {"total_size": 13231323136},
"weight_map": {
"model.embed_tokens.weight": "model-00001-of-00005.safetensors",
...
}
}
model.save_pretrained(path, safe_serialization=True):保存为 safetensors 格式。AutoModel.from_pretrained(path, torch_dtype=torch.float16):自动识别格式加载。convert_tf_checkpoint_to_pytorch.py:TensorFlow → PyTorch。convert_pytorch_checkpoint_to_tf2.py:PyTorch → TensorFlow 2.x。convert_slow_tokenizer.py:慢速分词器 → 快速分词器。torch.onnx.export():PyTorch 模型导出 ONNX。tf2onnx:TensorFlow 模型转换 ONNX。sklearn-onnx:Scikit-learn 模型转换。onnx-simplifier:简化 ONNX 图结构,去除冗余算子。onnxoptimizer:应用图优化 pass。onnx-tools:模型验证、可视化、量化。llama.cpp/convert.py:HF 模型 → GGUF 格式。ggml-quantize:GGUF 模型量化工具。# 数值一致性检查示例
import torch
import numpy as np
def compare_outputs(output1, output2, rtol=1e-3, atol=1e-5):
return np.allclose(output1.numpy(), output2.numpy(), rtol=rtol, atol=atol)
| 应用场景 | 首选格式 | 备选格式 | 关键考量因素 |
|---|---|---|---|
| 研究与实验 | .pt / .ckpt |
.safetensors |
保留完整训练上下文,便于调试与继续训练 |
| 生产 Web 服务 | .safetensors / .onnx |
.bin → .safetensors |
安全性、加载速度、推理引擎兼容性 |
| CPU 本地部署 | .gguf |
.onnx |
内存效率、量化支持、跨平台兼容性 |
| GPU 高性能推理 | .engine / .safetensors |
.onnx |
推理性能、硬件优化、动态输入支持 |
| 移动端/边缘设备 | .tflite / .mlmodel |
.onnx |
模型大小、功耗、硬件加速支持 |
| 跨平台分发 | .onnx |
.safetensors |
标准化程度、运行时支持广度 |
| 模型微调 | .pt / .safetensors |
.ckpt |
梯度计算支持、优化器状态保存 |
| 模型服务化 | .safetensors / .onnx |
.pb |
服务稳定性、版本管理、API 兼容性 |
| 特性维度 | .pt/.bin |
.safetensors |
.onnx |
.gguf |
.trt |
.tflite |
|---|---|---|---|---|---|---|
| 加载速度 | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 推理性能 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 内存效率 | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 跨平台兼容性 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ |
| 安全性 | ⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 生态成熟度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 开发调试友好性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐ |
开始选择模型格式
↓
是否需要训练/微调?
┌─── 是 ──→ .pt/.safetensors
└─── 否
↓
目标部署平台?
├─── GPU服务器 ──→ .safetensors/.engine
├─── CPU服务器 ──→ .gguf/.onnx
├─── 移动设备 ──→ .tflite/.mlmodel
└─── 跨平台 ──→ .onnx
↓
性能要求级别?
├─── 极致性能 ──→ 专用优化格式(.engine/.gguf)
├─── 平衡性能 ──→ 通用格式(.safetensors/.onnx)
└─── 兼容优先 ──→ 标准格式(.onnx)
↓
确定最终格式
通过深入理解各种模型文件格式的技术特性、适用场景和转换策略,开发者可以在 LLM 系统的全生命周期中做出最优的技术决策,从而构建高效、安全、可扩展的大模型应用系统。建议在实际项目中建立格式选择的标准化流程,结合自动化工具链实现最佳的工程实践。