前言
模型格式
深度学习模型的存储格式多样,按用途、框架、安全性、部署场景可分为以下几类。
以下是全面、清晰的分类解析(附对比表格与选择指南):
主流模型存储格式
框架原生格式
| 格式 | 扩展名 | 特点 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|
| PyTorch 原生 | .pt / .pth / .bin |
基于 pickle 序列化 |
保留完整训练状态(模型+优化器+epoch) | ⚠️ 安全风险高(可执行任意代码) | 本地训练 checkpoint |
| Safetensors | .safetensors |
纯张量二进制 + JSON 头 | ✅ 安全(无代码执行) ✅ 加载快 20–50% ✅ 跨框架(PT/TF/Flax) | 不含模型结构(需配合 config.json) |
Hugging Face 新标准,推荐下载 |
| TensorFlow SavedModel | 目录(含 saved_model.pb + variables/) |
完整计算图 + 权重 | 生产部署友好,TF Serving 原生支持 | 体积大,目录结构复杂 | TensorFlow 服务化部署 |
| Keras HDF5 | .h5 |
HDF5 格式存储权重/结构 | 人类可读元数据,Keras 原生支持 | 仅限 Keras,大模型加载慢 | Keras 项目快速保存 |
| JAX/Flax | .msgpack / .flax |
Flax 原生序列化 | 与 JAX 生态深度集成 | 社区较小 | JAX 项目 |
跨框架交换格式
模型迁移
| 格式 | 扩展名 | 核心价值 | 注意事项 |
|---|---|---|---|
| ONNX | .onnx |
框架无关(PT/TF/MXNet → ONNX) | 需验证算子兼容性;动态 shape 需显式指定 |
| PMML | .pmml |
传统机器学习模型交换(Sklearn/XGBoost) | 深度学习支持弱,逐渐被 ONNX 取代 |
💡 工具链:
torch.onnx.export()/tf2onnx/skl2onnx
推理优化格式
| 格式 | 扩展名 | 优化方向 | 适用平台 |
|---|---|---|---|
| TensorRT | .engine / .plan |
NVIDIA GPU 极致加速(FP16/INT8) | NVIDIA GPU 服务器 |
| OpenVINO | .xml + .bin |
Intel CPU/GPU 优化 | Intel 硬件 |
| TensorFlow Lite | .tflite |
移动端/嵌入式轻量化 | Android/iOS/树莓派 |
| Core ML | .mlmodel |
Apple 全生态优化 | iOS/macOS |
| TorchScript | .pt |
PyTorch 固化计算图 | LibTorch C++ 部署 |
量化专用格式
| 格式 | 扩展名 | 特点 | 适用工具链 |
|---|---|---|---|
| GGUF | .gguf |
CPU 友好,支持 INT4/5/8 量化 | llama.cpp(本地运行 LLM 首选) |
| AWQ / GPTQ | .safetensors(带量化元数据) |
GPU 友好,4-bit 量化 | vLLM / AutoGPTQ / SGLang |
| bitsandbytes | 框架内量化 | 训练时 4/8-bit 量化 | Hugging Face transformers + accelerate |
重要趋势:
量化权重普遍采用
.safetensors作为载体(如model-00001-of-00002.safetensors),兼顾安全与效率。
其他格式
| 格式 | 说明 |
|---|---|
| Diffusers 分片 | Stable Diffusion 模型常拆分为 model.safetensors.index.json + 多个 .safetensors 分片 |
| Caffe | .caffemodel(历史格式,已少用) |
| Pickle 泛用 | .pkl(Sklearn 模型等,同样有安全风险) |
核心对比总结
| 维度 | 推荐格式 | 原因 |
|---|---|---|
| 安全下载 | .safetensors |
无 pickle 风险,Hugging Face 新模型默认提供 |
| 本地训练保存 | .pt(含 optimizer) |
便于断点续训 |
| 跨框架迁移 | .onnx |
生态工具链成熟 |
| NVIDIA GPU 部署 | TensorRT .engine |
性能最优 |
| CPU 本地运行 LLM | GGUF .gguf |
llama.cpp 支持,低资源可用 |
| 大模型量化部署 | AWQ/GPTQ + .safetensors |
vLLM/SGLang 原生支持 |
一句话选择指南
| 你的需求 | 选这个格式 |
|---|---|
| 我想安全下载开源模型 | ✅ 认准 .safetensors |
| 我要在手机上跑模型 | ✅ TFLite / Core ML |
| 我要在 NVIDIA 服务器部署 | ✅ TensorRT 或 AWQ + vLLM |
| 我要把 PyTorch 模型给 TensorFlow 用 | ✅ ONNX |
| 我只有 CPU 想跑 7B 大模型 | ✅ GGUF (Q4_K_M) |
行业趋势:
Safetensors 已成为开源模型分发的新标准(Hugging Face、ModelScope、OpenRouter 均优先提供),
量化格式(GGUF/AWQ)+ 安全载体(.safetensors)是边缘/私有部署的黄金组合。
模型下载
虚拟环境创建
Python虚拟环境-Miniconda的部署和使用 | 码客说
创建虚拟环境
1 | conda create -n DeepSeek-OCR-2 python=3.10 -y |
激活环境
1 | conda activate DeepSeek-OCR-2 |
取消激活
1 | conda deactivate |
激活虚拟环境后
安装ModelScope
1 | pip install modelscope |
下载模型
方式1
指定下载目录
1 | modelscope download --model deepseek-ai/DeepSeek-OCR-2 --local_dir "D:\AI\Models\DeepSeek-OCR-2" |
方式2
下面这种方式会在设置的目录下自动创建models文件夹
1 | # Linux/macOS |
方式3(推荐)
添加环境变量
然后这样下载
1 | modelscope download --model deepseek-ai/DeepSeek-OCR-2 |
相关知识
参数数量与显存
部署
| 场景 | 每参数显存估算 | 7B 模型示例 |
|---|---|---|
| FP32 推理 | 4 字节 | ~28 GB |
| BF16 推理 | 2 字节 | ~14 GB |
| INT8 推理 | 1 字节 | ~7 GB |
| INT4 推理 | 0.5 字节 | ~3.5 GB |
| Adam 训练(无优化) | ~12–20 字节 | >100 GB |
| ZeRO-3 分片训练 | ~2–4 字节 | ~14–28 GB(多卡分摊) |
微调
| 微调方法 | 显存需求 | 是否需要多卡 | 典型硬件 |
|---|---|---|---|
| 全参数微调 | >100 GB | ✅ 是 | 2×A100 80G / 8×V100 |
| LoRA | 20–25 GB | ❌ 否 | RTX 3090/4090 (24G) |
| QLoRA | 14–18 GB | ❌ 否 | RTX 3080 (16G) 起 |
| Prompt Tuning | <5 GB | ❌ 否 | 任意消费级显卡 |
LoRA
显存≈(原参数量×2)+(LoRA 参数量×12)显存≈(原参数量×2)+(LoRA 参数量×12)
7B 模型 + LoRA(0.5% 参数):
- 原模型:7B × 2B = 14 GB
- LoRA 参数:35M × 12B ≈ 0.42 GB
- 激活值:~5–10 GB(取决于 batch size)
总计:~20–25 GB → 单张 RTX 3090/4090(24G) 可运行
张量类型
张量类型通常指张量所使用的数据格式(数值类型),用于表示其中每个元素的存储方式和精度。
常见于深度学习、科学计算和硬件加速场景。
张量(Tensor) 是数学和计算机科学中的一个基本概念,可以看作是标量、向量、矩阵的高维推广。它的核心思想是:用一个多维数组来表示具有多个方向或维度的数据。
| 名称 | 阶数(Rank) | 数学对象 | 编程中的形式 | 示例 |
|---|---|---|---|---|
| 标量 | 0 | 单个数值 | 5 |
温度、损失值 |
| 向量 | 1 | 一维数组 | [1, 2, 3] |
词嵌入、坐标 |
| 矩阵 | 2 | 二维数组 | [[1,2],[3,4]] |
图像灰度图、权重矩阵 |
| 张量 | ≥3 | 三维及以上数组 | shape=(64, 224, 224, 3) |
彩色图像批次、视频、特征图 |
常见张量类型举例:
- F32:32位单精度浮点数(标准高精度浮点)
- F16:16位半精度浮点数(节省内存,适合推理)
- BF16:Brain Float16,16位浮点,指数位与F32相同,动态范围大,适合训练
- I32 / I64:32位或64位整数,常用于索引、计数
- UINT8:8位无符号整数,常用于图像像素或量化模型
示例:
张量类型 BF16·I32·F32 表示:
- 主数据(如权重、激活)以 BF16 存储;
- 操作中使用了 I32 类型的索引或整数参数;
- 计算结果或累加值以 F32 精度输出,保证数值稳定性。