在PyTorch中,.pt
和.pth
文件均用于保存模型,但两者在设计初衷、存储内容和使用场景上存在差异。以下是详细对比:
1. 核心区别
特性 | .pt 文件 | .pth 文件 |
---|---|---|
存储内容 | 完整模型(结构+参数+优化器状态等) | 仅模型参数(state_dict ) |
文件大小 | 较大(包含额外元数据) | 较小(仅参数) |
加载方式 | 直接加载,无需定义模型结构 | 需先实例化模型,再加载参数 |
适用场景 | 部署、跨环境迁移 | 训练中断恢复、参数共享 |
2. 技术细节
-
.pt
文件- 生成代码:
torch.save(model, "model.pt")
- 优势:包含完整的模型信息,适合直接用于推理或迁移到无代码环境。
- 风险:若模型类定义变更,加载可能失败(需确保代码兼容性)。
- 生成代码:
-
.pth
文件- 生成代码:
torch.save(model.state_dict(), "model.pth")
- 优势:灵活性高,可加载到不同结构的模型中(如迁移学习)。
- 限制:需手动重建模型结构,否则无法直接使用。
- 生成代码:
3. 版本与社区习惯
- 历史演变:
.pth
曾是早期PyTorch的默认格式,后逐渐被.pt
取代(尤其PyTorch 1.6+)。.pt
现为官方推荐格式,支持更完整的序列化(如TorchScript)。
- 命名惯例:
.pt
多用于完整模型或TorchScript导出。.pth
仍广泛用于参数保存(如Hugging Face库)。
4. 安全性与性能
- 安全性:
- 两者均基于
pickle
序列化,存在代码注入风险,需确保文件来源可信。 .safetensors
(Hugging Face推出)是更安全的替代方案。
- 两者均基于
- 加载效率:
.pth
因体积小,加载更快。.pt
支持内存映射(如TorchScript优化后),适合大模型。
5. 如何选择?
- 选
.pt
:- 需一键部署模型(如API服务)。
- 需保留训练状态(如优化器、epoch计数)。
- 选
.pth
:- 仅需参数(如迁移学习或模型压缩)。
- 需跨项目共享权重(避免结构依赖)。
总结
- 本质差异:
.pt
是“完整存档”,.pth
是“参数快照”。 - 实践建议:优先使用
.pt
确保兼容性,仅在参数共享时用.pth
。