在大模型的训练与部署过程中,选择合适的参数文件格式至关重要。不同的框架和场景对模型参数的存储和加载有着不同的要求。本文将详细介绍存储大模型参数的常见文件格式及其特点,从而更好地理解和选择适合的格式。
PyTorch 相关格式
1. .pth
或 .pt
- 简介:这是 PyTorch 中用于保存模型状态的标准格式。它可以保存模型的
state_dict
(包含所有可学习参数)或整个模型(包括结构和参数)。 - 特点:
- 灵活性:可以轻松保存和加载模型的参数,支持在不同设备之间迁移模型。
- 兼容性:与 PyTorch 框架高度兼容,加载时使用
torch.load()
函数,保存时使用torch.save()
函数。
- 适用场景:适用于 PyTorch 框架下的模型保存和加载,特别是在需要频繁迁移模型参数的情况下。
2. .safetensors
- 简介:由 Hugging Face 团队开发,专为存储和加载大型张量而设计的格式。
- 特点:
- 安全性:特别关注模型的安全性,防止潜在的恶意代码注入。
- 隐私保护:支持加密存储,保护模型的隐私。
- 快速加载:通过优化的二进制格式和支持内存映射,显著提高大模型文件的加载速度。
- 适用场景:适用于需要高安全性和快速加载的大模型,特别是在 Hugging Face 的 Transformers 库中广泛使用。
TensorFlow 相关格式
1. .ckpt
- 简介:TensorFlow 1.x 中用于保存模型参数和优化器状态的文件格式。
- 特点:
- 自定义序列化:采用 TensorFlow 的自定义序列化格式,不能直接用于其他框架。
- 兼容性:可以使用 TensorFlow 的
tf.train.Saver
类来加载和保存.ckpt
文件。
- 适用场景:适用于 TensorFlow 1.x 框架下的模型保存和加载,特别是在需要保存优化器状态的情况下。
2. .h5
或 .hdf5
- 简介:HDF5 格式,用于保存 Keras 模型。
- 特点:
- 结构和参数:包含了模型的权重、结构和配置信息。
- 兼容性:与 Keras 框架高度兼容,支持在不同设备之间迁移模型。
- 适用场景:适用于 Keras 框架下的模型保存和加载,特别是在需要保存模型结构和配置信息的情况下。
3. .pb
- 简介:Protocol Buffers 格式,用于保存 TensorFlow 的计算图。
- 特点:
- 计算图:保存了模型的计算图结构,可以用于模型的部署和推理。
- 兼容性:与 TensorFlow 框架高度兼容,支持在不同设备之间迁移模型。
- 适用场景:适用于 TensorFlow 框架下的模型部署和推理,特别是在需要保存计算图结构的情况下。
ONNX 格式
.onnx
- 简介:ONNX(Open Neural Network Exchange)是一个开放的格式,允许模型在不同框架之间转换和运行。
- 特点:
- 跨框架:打破了框架之间的壁垒,使得模型可以在不同的深度学习框架之间进行转换和部署。
- 兼容性:支持多种深度学习框架,如 PyTorch、TensorFlow、Keras 等。
- 适用场景:适用于需要在不同框架之间转换和部署的模型,特别是在跨框架的模型优化和推理中。
其他格式
1. .bin
- 简介:一种通用的二进制文件格式,可以用于保存模型参数和优化器状态。
- 特点:
- 通用性:可以被多种框架所使用,例如 TensorFlow、PyTorch 和 ONNX 等。
- 自定义:加载和保存时需要自定义逻辑,灵活性较高。
- 适用场景:适用于需要通用性和灵活性的模型保存和加载,特别是在需要自定义保存逻辑的情况下。
2. .pkl
或 .pickle
- 简介:Python 提供的标准序列化格式,可以保存模型的结构和参数。
- 特点:
- 兼容性:适合在 Python 环境中保存和加载模型。
- 文件大小:文件较大,且仅限 Python 环境。
- 适用场景:适用于 Python 环境下的模型保存和加载,特别是在需要保存模型结构和参数的情况下。
3. .gguf
- 简介:Google 的 GFST(Google Finite State Transducer)格式,用于保存语言模型。
- 特点:
- 自定义序列化:采用 Google 的自定义序列化格式,不能直接用于其他框架。
- 兼容性:仅限于 Google 的相关框架和工具。
- 适用场景:适用于 Google 的相关框架和工具,特别是在需要保存语言模型的情况下。
4. .engine
- 简介:由 NVIDIA TensorRT 提供,专门针对 TensorFlow 和 PyTorch 模型进行优化的格式。
- 特点:
- 高性能:优化了模型的推理性能,特别是在 GPU 上的推理。
- 兼容性:仅限于 NVIDIA 的 TensorRT 框架。
- 适用场景:适用于需要高性能推理的模型,特别是在 GPU 上的推理。
5. .caffemodel
- 简介:用于保存训练好的 Caffe 模型。
- 特点:
- 自定义序列化:采用 Caffe 的自定义序列化格式,不能直接用于其他框架。
- 兼容性:仅限于 Caffe 框架。
- 适用场景:适用于 Caffe 框架下的模型保存和加载。
6. .params
- 简介:用于保存 MXNet 模型的参数。
- 特点:
- 自定义序列化:采用 MXNet 的自定义序列化格式,不能直接用于其他框架。
- 兼容性:仅限于 MXNet 框架。
- 适用场景:适用于 MXNet 框架下的模型保存和加载。
7. .pdparams
- 简介:用于保存 PaddlePaddle 模型的参数。
- 特点:
- 自定义序列化:采用 PaddlePaddle 的自定义序列化格式,不能直接用于其他框架。
- 兼容性:仅限于 PaddlePaddle 框架。
- 适用场景:适用于 PaddlePaddle 框架下的模型保存和加载。
8. .mlmodel
- 简介:用于保存 Core ML 模型,Core ML 是 Apple 的机器学习框架。
- 特点:
- 自定义序列化:采用 Apple 的自定义序列化格式,不能直接用于其他框架。
- 兼容性:仅限于 Apple 的 Core ML 框架。
- 适用场景:适用于 Apple 的 Core ML 框架下的模型保存和加载。
9. .ts
- 简介:PyTorch 的模型序列化格式,允许模型在没有 Python 解释器的情况下运行。
- 特点:
- 自定义序列化:采用 PyTorch 的自定义序列化格式,不能直接用于其他框架。
- 兼容性:仅限于 PyTorch 框架。
- 适用场景:适用于 PyTorch 框架下的模型部署和推理,特别是在需要在没有 Python 解释器的情况下运行模型的情况下。
10. .mlnet
- 简介:ML.NET 模型的格式。
- 特点:
- 自定义序列化:采用 ML.NET 的自定义序列化格式,不能直接用于其他框架。
- 兼容性:仅限于 ML.NET 框架。
- 适用场景:适用于 ML.NET 框架下的模型保存和加载。
总结
- 存储大模型参数的文件格式多种多样,每种格式都有其独特的特点和适用场景。
- 选择合适的文件格式可以显著提高模型的存储、加载和推理效率。
- 在实际应用中,根据具体的框架和需求选择合适的格式是非常重要的。
融媒体矩阵
[×] 个人主页:https://lizyshare.github.io
[×] wx公众号:卖火柴的码农
下期预告:一文带你了解 Markdown 常用命令