📝 引言
在深度学习领域,模型文件格式的选择直接影响到模型的存储、加载效率、安全性和跨平台兼容性。本文将全面解析主流的模型文件格式,帮助读者在不同应用场景下做出最优选择。
💾 主流模型文件格式详解
1. .safetensors
- 新一代安全高效的模型格式
核心特性
- 开发方:由 Hugging Face 团队开发
- 设计目标:安全性、高效加载、跨平台兼容
- 文件内容:仅包含模型的权重参数,不包含可执行代码
- 存储结构:优化的二进制格式,支持内存映射
主要优势
- 安全性:完全避免了代码注入风险
- 加载速度:
- 通过内存映射技术,显著提升大模型加载速度
- 支持零拷贝加载(Zero-copy loading),直接从磁盘映射到内存,无需额外的内存拷贝操作
- 特别适合加载大型模型,可显著减少内存使用和加载时间
- 灵活访问:支持选择性加载特定层的权重
- 内存效率:优化的文件布局,减少内存占用
- 适用场景:Hugging Face 生态、快速部署
2. .ckpt
- PyTorch Lightning 的标准格式
核心特性
- 适用框架:PyTorch Lightning 生态
- 存储范围:完整训练状态(模型参数、优化器状态、训练进度等)
- 主要用途:训练过程的中断与恢复
安全风险
- 使用 pickle 序列化,存在代码注入风险
- 缺乏内置的完整性验证机制
- 难以检测潜在的恶意代码
3. .pt/.pth
- PyTorch 原生格式
核心特性
- 适用框架:PyTorch
- 存储选项:
- 仅保存权重参数(state_dict)
- 保存完整模型(包含结构)
- 文件扩展名:.pt 和 .pth 本质相同,命名偏好不同
- .pt 文件:更适合保存完整的模型,包括结构和参数。这使得在加载模型时不需要重新定义模型结构,便于模型的分享和部署。
例如,当需要将模型直接用于推理时,.pt 文件是一个方便的选择。 - .pth 文件:更适合保存模型的状态字典,通常用于模型的训练和开发阶段。
当需要在不同环境中重新定义模型结构并加载参数时,.pth 文件更为灵活。
例如,在迁移学习中,通常会加载 .pth 文件中的权重到新的模型结构中。
- .pt 文件:更适合保存完整的模型,包括结构和参数。这使得在加载模型时不需要重新定义模型结构,便于模型的分享和部署。
- 文件大小:
- .pt 文件:通常较大,因为它可能包含完整的模型结构和参数。
- .pth 文件:通常较小,因为它只包含模型的参数,不包含模型结构。
- 社区偏好:
- .pt 文件:
更常用于保存完整的模型,尤其是在模型部署和分享时。 - .pth 文件:
更常用于保存模型的状态字典,尤其是在模型训练和开发阶段。
- .pt 文件:
- 使用方法:
# 保存模型权重 torch.save(model.state_dict(), 'weights.pth') # 保存完整模型 torch.save(model,