首页/AI/大模型部署与运维速查/模型权重格式:safetensors / bin / GGUF / ONNX
部署形态与选型43 条

模型权重格式:safetensors / bin / GGUF / ONNX

权重格式决定能上哪些推理框架:safetensors 是服务端主流(vLLM、TGI 直接支持);GGUF 面向 llama.cpp 与 Ollama;ONNX 多用于跨平台与编译部署栈。

格式决定能上哪些引擎

权重格式不是细节问题,它直接决定模型能喂给哪个推理框架。safetensors 是服务端主流格式,支持内存映射加载;早期的 PyTorch bin 文件用 pickle 序列化,加载慢且存在反序列化风险;GGUF 是 llama.cpp 生态的单文件格式,自带量化档位;ONNX 偏跨平台与编译部署。拿到权重后第一件事是确认格式与目标引擎匹配。

格式对照

格式常见使用者说明
safetensorsvLLM、TGI、Transformers安全序列化,支持内存映射,多分片配索引文件
PyTorch bin较早发布的模型pickle 序列化,加载慢且存在反序列化风险
GGUFllama.cpp、Ollama单文件多档位,量化信息写在文件名里
ONNXONNX Runtime、编译部署栈与运行时和硬件绑定,偏工程化落地
TensorRT 引擎TensorRT-LLM针对具体 GPU 架构编译,换卡需要重编

核对要点

目录必备文件config.json、tokenizer 相关文件、权重分片与其索引
多分片条件需要 index 文件描述分片与张量映射,缺了无法自动合并
精度信息config 里记录权重 dtype,与量化内核要求必须一致
模板文件对话模板缺失或错配会导致输出格式异常

查看模型目录

查看模型目录
ls models/<模型>/          # 关注 config.json、tokenizer*、*.safetensors、*.index.json
ls models/<模型>/*.safetensors | wc -l    # 分片数量
# 校验单个分片能否完整解析(能打开不代表张量齐全,还要看大小)
python -c "from safetensors.torch import load_file; load_file('models/<模型>/model-00001-of-00004.safetensors')"
# 看配置里的精度与结构信息
python -c "import json; c=json.load(open('models/<模型>/config.json')); print(c.get('torch_dtype'), c.get('num_hidden_layers'))"

典型使用场景

  • 选引擎前确认格式:手上是 GGUF 就不要指望服务端引擎直接加载
  • 下载后核对完整性:分片数量与索引文件是否齐全,缺一个都可能导致加载失败
  • 排查加载失败:先看格式与量化要求是否匹配,再看路径与权限
  • 做量化转换:从高精度格式转成目标格式与档位,转换后要用固定用例回归
  • 离线搬迁:把整个目录连同配置文件一起搬,只搬权重文件会缺模板与配置
同一仓库常同时提供多种格式:按目标引擎能力挑,不要「拿到哪种用哪种」,格式不匹配是加载失败的高频原因。
用 pickle 序列化的权重来自不可信来源时存在反序列化风险:优先选 safetensors,并确认来源可信。

易错点

  • 缺索引文件的多分片权重:部分框架无法自动合并加载,先补全再排查
  • 只拷权重不拷配置与模板:服务能启动但输出模板错乱,问题很难定位到下载环节
  • 把量化权重喂给不支持该内核的引擎:加载报错或结果异常,需按引擎支持矩阵选格式
  • 混用不同来源的分片:分片之间张量映射不一致会直接加载失败
  • 不做文件大小核对:下载中断的半截文件看起来正常,加载时才暴露

数据来源与参考

  • Hugging Face safetensors 文档(huggingface.co/docs/safetensors)
  • llama.cpp 仓库(github.com/ggml-org/llama.cpp)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌