大模型(如LLM、视觉模型等)在训练、部署和推理过程中会使用多种文件格式来存储模型结构、权重和配置信息。以下是常见的格式及其详细解释:
1. PyTorch 原生格式(.pt / .pth)
-
用途:PyTorch框架的默认保存格式。
-
特点:
- 可保存完整的模型(结构+权重)或仅权重。
- 依赖PyTorch环境加载,跨平台兼容性较差。
-
示例代码:
python
torch.save(model.state_dict(), 'model.pt') # 仅权重 torch.save(model, 'full_model.pt') # 完整模型
2. TensorFlow 格式
-
SavedModel(目录) :
- TensorFlow的通用格式,包含模型结构、权重和计算图。
- 适合跨平台部署(如TF Serving、TFLite)。
-
HDF5(
.h5) :- Keras模型的保存格式,可存储模型结构和权重。
-
示例代码:
python
model.save('saved_model') # SavedModel格式 model.save('model.h5') # HDF5格式
3. ONNX(Open Neural Network Exchange)
-
用途:跨框架的开放格式,支持PyTorch、TensorFlow等模型的交换。
-
特点:
- 标准化计算图表示,支持硬件加速(如ONNX Runtime)。
- 适合推理优化,但不支持训练。
-
示例代码(PyTorch转ONNX):
python
torch.onnx.export(model, input_sample, 'model.onnx', opset_version=13)
4. GGML / GGUF(用于CPU推理的量化格式)
-
用途:专为CPU推理设计的轻量级格式,常见于Llama.cpp等库。
-
特点:
- GGML:早期格式,支持整数量化(如4-bit、8-bit)。
- GGUF:改进版(2023年推出),更灵活的元数据支持。
-
工具链:
- 使用
convert.py将PyTorch模型转为GGUF,再通过llama.cpp推理。
- 使用
5. SafeTensors
-
用途:由Hugging Face推出的安全张量存储格式。
-
特点:
- 避免传统Pickle的反序列化风险(如恶意代码注入)。
- 支持快速加载和内存映射。
-
示例代码:
python
from safetensors import safe_open with safe_open('model.safetensors', framework='pt') as f: weights = f.get_tensor('weight')
6. NVIDIA TensorRT(.engine)
-
用途:NVIDIA的高性能推理引擎格式。
-
特点:
- 针对NVIDIA GPU优化,支持FP16/INT8量化。
- 需通过ONNX或直接转换生成。
-
工具链:
bash
trtexec --onnx=model.onnx --saveEngine=model.engine
7. 其他格式
- Core ML(
.mlmodel) :苹果生态的移动端推理格式。 - TFLite(
.tflite) :TensorFlow的轻量级移动/嵌入式格式。 - PaddlePaddle(
.pdparams) :百度飞桨的模型格式。
格式选择建议
| 场景 | 推荐格式 |
|---|---|
| PyTorch训练/微调 | .pt / .pth |
| 跨框架部署 | ONNX |
| CPU端轻量化推理 | GGUF / GGML |
| NVIDIA GPU高性能推理 | TensorRT(.engine) |
| 安全权重分发 | SafeTensors |
| 移动端(iOS) | Core ML |