safetensor存取pytorch模型参数、玄数据简例

safetensors [1] 号称提供一种更安全的存数据方式,支持多种框架,见 2。不过在处理玄数据(metadata)时:

  • 只支持 Dictstr, str 的形式,即值必须是字符串,而不能是 int、float 或嵌套 dict,而这些在 PyTorch 原先的 torch.save、torch.load 是支持的。考虑用 json.dumps 将 dict 转写成字符串,读时则用 json.loads 恢复回 dict。
  • 没有专门从 checkpoint 文件读出 metadata 的方法。考虑采用 3Ok_Storage_1799 的回答所讲利用 safetensors.safe_open 的方法读 metadata。

下面是存、取 PyTorch 模型参数、metadata 的简例:

python 复制代码
import time, json, pprint
import torch
from safetensors import safe_open # to read metadata
from safetensors.torch import save_model, load_model

print("建模型")
model = torch.nn.Linear(2, 3)
# 初始参数值
for pn, p in model.named_parameters():
    print(pn, p)


print("存模型、metadata")
# 将模型参数置零 (模拟 training)
for p in model.parameters():
    p.data.zero_()
# 存模型
save_model(
    model,
    "ckpt.safetensors",
    # metadata 用 json 转写成 str
    {"metadata": json.dumps({
        "time": time.asctime(),
        "epoch": 57,
        "acc": 0.56,
        "args": {
            "debug": False,
            "dataset": "MNIST",
            "decay_steps": [10, 20]
        }
    })}
)


print("读模型")
load_model(model, "ckpt.safetensors")
# 验证更新(置零)后参数值
for pn, p in model.named_parameters():
    print(pn, p)


print("读 metadata")
with safe_open("ckpt.safetensors", framework="pt") as f:
    print(type(f), dir(f))
    print(list(f.keys())) # 模型参数的名字
    print(type(f.metadata())) # dict
    for k, v in f.metadata().items():
        print(k, v)
        # 用 json 恢复 metadata 成 dict
        if "metadata" == k:
            metadata = json.loads(v)

    pprint.pprint(metadata)

References

  1. huggingface/safetensors
  2. Python documentation
  3. How to get metadata from a safetensor file?
相关推荐
2601_956319883 分钟前
期货夜盘无人值守监控什么:断线、无成交与拒单信号
python·区块链
CTA终结者3 分钟前
期货量化目标仓和净持仓对不齐:天勤 TargetPosTask 与 pos 偏差排查
python·区块链
科技林总25 分钟前
解决vllm服务漏扫问题
python·安全
祭曦念1 小时前
古诗小集开发实战:从零开发一款 HarmonyOS 古诗鉴赏应用
pytorch·深度学习·harmonyos
财经资讯数据_灵砚智能2 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月10日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
namexingyun2 小时前
拆解Fable 5三重安全护栏:模型路由、蒸馏防护与生物安全分类器的技术原理 - 微元算力(weytoken)
java·人工智能·python·安全·架构·ai编程
chenment2 小时前
别再为每个模型单独写一套队列了:用 200 行代码封装多模态统一调用层
人工智能·python·产品
啊森要自信2 小时前
【GUI自动化测试】控件、鼠标键盘操作与多场景自动化
c语言·开发语言·python·adb·ipython
YJlio2 小时前
《Sysinternals实战指南》16.5 Ctrl2Cap 工具详解:把 Caps Lock 变成 Ctrl 的键盘改造与回退方法
linux·运维·服务器·网络·python·学习·计算机外设
某林2122 小时前
从底层硬件死锁到 QoS 通信底层的全链路复盘
python·ros2·qos