MindSpore Transformers:safetensors 高性能张量存储格式
一、概述
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)
- 极高安全性
- 传统 PyTorch
.bin使用 pickle 序列化,可被植入恶意代码; - safetensors 仅存储纯张量数据,无代码执行能力,是模型开源、分发、部署的安全标准。
- 极速加载(提升 300%~1000%)
- 支持
mmap()内存映射,无需完全读入内存,直接从磁盘映射使用; - LLM 7B 模型加载从 30 秒 → 1~3 秒,大幅提升训练重启与推理速度。
- MindSpore 昇腾 NPU 友好
- 支持直接加载到 NPU 内存,减少 CPU↔NPU 数据拷贝,提升训练 / 微调效率。
- 跨框架通用
- 一份 safetensors 权重可在 PyTorch、MindSpore、TensorFlow、JAX 通用,
- 彻底解决大模型跨框架迁移权重转换难题。
- 随机访问(分片加载)
- 可单独读取某个层权重,无需加载整个模型,适合大模型分片、分布式并行。
(三)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 关键要点
- 安全:不使用 pickle,无代码执行漏洞,生产环境强制使用。
- 速度:加载速度比 bin/ckpt 快 3~10 倍,大模型效果更明显。
- NPU 优化:支持直接映射到昇腾 NPU 内存,减少数据搬运。
- 自动识别:
from_pretrained自动优先加载 safetensors。 - 跨框架:与 Hugging Face 模型 100% 兼容,无需转换。
五、生产环境最佳实践
- 训练 / 微调:保存权重必须开启
safe_serialization=True。 - 模型分发:只上传 safetensors 文件,安全无风险。
- 推理部署:MindSpore + MindIE 均原生支持,加载最快。
- 大模型并行:safetensors 分片加载效率最高。
六、总结
safetensors 是深度学习模型权重存储的新一代标准,具备安全、极速、内存高效、跨框架兼容四大核心优势,已成为 LLM 与 Transformer 模型的官方推荐格式。
在 MindSpore Transformers 昇思生态中,safetensors 实现全流程原生支持:从模型加载、微调训练、权重保存到推理部署,无需修改代码即可享受高性能与高安全。相比传统 ckpt/bin 格式,safetensors 在昇腾 NPU 上可带来数倍加载速度提升与绝对安全保障,是国产化大模型训练、微调、上线部署的必备格式。
更多推荐


所有评论(0)