一、概述

safetensors 是由 Hugging Face 推出的深度学习专用张量存储格式,旨在替代传统不安全、加载慢的 bin/ckpt/pth 权重文件,成为大模型(LLM、Transformer、视觉模型)存储与分发的行业标准。MindSpore Transformers 在昇思生态中全面原生支持 safetensors,实现模型权重安全加载、极速读取、跨框架兼容、内存零拷贝,特别适配昇腾 NPU 高性能训练与推理场景。

safetensors 解决了传统权重格式的三大痛点:恶意代码执行风险、加载速度慢、内存占用高。在 MindSpore LLM 微调、推理、部署全流程中,safetensors 已是默认推荐格式。

二、safetensors 核心原理与优势内容

(一)safetensors 是什么

safetensors 是一种二进制张量文件格式,专门用于存储深度学习模型权重(Tensor)。

文件结构 = 头部 JSON 元信息(描述张量名、shape、dtype、offset) + 连续二进制张量数据。

特点:无序列化漏洞、可随机读取、支持内存映射、跨平台跨框架通用。

(二)核心优势(对比 .bin/.ckpt)

  1. 极高安全性
  2. 传统 PyTorch .bin 使用 pickle 序列化,可被植入恶意代码;
  3. safetensors 仅存储纯张量数据,无代码执行能力,是模型开源、分发、部署的安全标准。
  4. 极速加载(提升 300%~1000%)
  5. 支持 mmap() 内存映射,无需完全读入内存,直接从磁盘映射使用;
  6. LLM 7B 模型加载从 30 秒 → 1~3 秒,大幅提升训练重启与推理速度。
  7. MindSpore 昇腾 NPU 友好
  8. 支持直接加载到 NPU 内存,减少 CPU↔NPU 数据拷贝,提升训练 / 微调效率。
  9. 跨框架通用
  10. 一份 safetensors 权重可在 PyTorch、MindSpore、TensorFlow、JAX 通用,
  11. 彻底解决大模型跨框架迁移权重转换难题。
  12. 随机访问(分片加载)
  13. 可单独读取某个层权重,无需加载整个模型,适合大模型分片、分布式并行。

(三)MindSpore Transformers 中的应用场景

  • 预训练模型加载(Qwen/LLaMA/Baichuan/GPT2)
  • LoRA 微调后权重保存
  • 模型合并与导出
  • MindIE 推理引擎权重输入
  • 模型分发与云端部署

三、MindSpore Transformers 中 safetensors 实战代码

以下代码基于 MindSpore 2.2+ / MindFormers 1.0+,可直接在昇腾 NPU/openEuler 运行。

1. 环境安装

pip install safetensors mindspore mindformers numpy

2. 功能 1:从 safetensors 加载 LLM 模型(最常用)

MindSpore Transformers 已自动支持 safetensors,只需指定路径即可。

import mindspore as ms
from mindformers import AutoModel, AutoTokenizer

# 昇腾环境配置
ms.set_context(device_target="Ascend", mode=ms.GRAPH_MODE)

# ===================== 配置 =====================
# 模型目录中包含:model.safetensors 或 model-00001-of-00002.safetensors
MODEL_PATH = "./qwen_7b_safetensors/"
# ================================================

# 一键加载 safetensors 权重(自动识别格式)
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
model = AutoModel.from_pretrained(
    MODEL_PATH,
    use_past=True,        # KV缓存加速
    compute_dtype=ms.bfloat16
)

print("✅ 从 safetensors 加载模型完成")

3. 功能 2:将模型保存为 safetensors 格式(训练 / 微调后)

微调后必须保存为 safetensors 用于安全分发与部署。

# 保存模型权重为 safetensors 格式
def save_as_safetensors(model, save_dir):
    # MindSpore Transformers 原生接口,自动生成 safetensors 文件
    model.save_pretrained(
        save_dir,
        safe_serialization=True  # 关键参数:启用 safetensors
    )
    tokenizer.save_pretrained(save_dir)
    print(f"✅ 模型已保存为 safetensors 格式:{save_dir}")

# 执行保存
save_as_safetensors(model, "./qwen_7b_finetune_safe")

4. 功能 3:原生 safetensors 张量读写(底层 API)

适用于权重查看、转换、编辑、提取。

import mindspore as ms
from safetensors import safe_open
from safetensors.mindspore import save_file

# ---------------------
# 1. 保存 MindSpore Tensor 为 safetensors
# ---------------------
tensors = {
    "weight": ms.Tensor([[1.0, 2.0], [3.0, 4.0]], dtype=ms.float32),
    "bias": ms.Tensor([[0.1], [0.2]], dtype=ms.float32)
}
save_file(tensors, "custom_weights.safetensors")
print("✅ 自定义张量保存为 safetensors 完成")

# ---------------------
# 2. 加载 safetensors 文件(支持内存映射)
# ---------------------
loaded_tensors = {}
with safe_open("custom_weights.safetensors", framework="np", device="cpu") as f:
    for key in f.keys():
        # 直接读取为 MindSpore Tensor
        loaded_tensors[key] = ms.Tensor(f.get_tensor(key))

print("加载 weight:\n", loaded_tensors["weight"])
print("加载 bias:\n", loaded_tensors["bias"])
print("✅ safetensors 张量加载完成")

5. 功能 4:大模型分片 safetensors 加载

7B/13B 大模型通常切分为多个 safetensors 分片,MindSpore 自动支持。

# 加载分片 safetensors 模型(自动合并)
model = AutoModel.from_pretrained("./llama_7b_safetensors_shards/")
print("✅ 分片 safetensors 模型加载完成")

6. 功能 5:bin/ckpt 转 safetensors(迁移必备)

def convert_ckpt_to_safetensors(ckpt_path, save_path):
    # 加载旧格式权重
    ckpt = ms.load_checkpoint(ckpt_path)
    # 保存为 safetensors
    save_file(ckpt, save_path)
    print(f"✅ 转换完成:{ckpt_path} -> {save_path}")

# 使用
convert_ckpt_to_safetensors("old_model.ckpt", "new_model.safetensors")

四、MindSpore 中 safetensors 关键要点

  1. 安全:不使用 pickle,无代码执行漏洞,生产环境强制使用。
  2. 速度:加载速度比 bin/ckpt 快 3~10 倍,大模型效果更明显。
  3. NPU 优化:支持直接映射到昇腾 NPU 内存,减少数据搬运。
  4. 自动识别:from_pretrained 自动优先加载 safetensors。
  5. 跨框架:与 Hugging Face 模型 100% 兼容,无需转换。

五、生产环境最佳实践

  • 训练 / 微调:保存权重必须开启 safe_serialization=True
  • 模型分发:只上传 safetensors 文件,安全无风险。
  • 推理部署:MindSpore + MindIE 均原生支持,加载最快。
  • 大模型并行:safetensors 分片加载效率最高。

六、总结

safetensors 是深度学习模型权重存储的新一代标准,具备安全、极速、内存高效、跨框架兼容四大核心优势,已成为 LLM 与 Transformer 模型的官方推荐格式。

在 MindSpore Transformers 昇思生态中,safetensors 实现全流程原生支持:从模型加载、微调训练、权重保存到推理部署,无需修改代码即可享受高性能与高安全。相比传统 ckpt/bin 格式,safetensors 在昇腾 NPU 上可带来数倍加载速度提升与绝对安全保障,是国产化大模型训练、微调、上线部署的必备格式。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐