多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

safetensors 跨平台部署:Win / Linux / macOS 一份命令跑通的实操笔记

safetensors 跨平台部署:Win / Linux / macOS 一份命令跑通的实操笔记 safetensors 跨平台部署Win / Linux / macOS 一份命令跑通的实操笔记【免费下载链接】safetensorsSimple, safe way to store and distribute tensors项目地址: https://gitcode.com/GitHub_Trending/sa/safetensors上次拉训练产物进流水线直接被扎了一下训练端用 pickle 序列化Linux CI 里 torch.load 一下安全扫描直接报任意代码执行告警更尴尬的是 Mac 开发机导出的文件在 Windows 机器上加载报错我先怀疑 dtype 问题白排查了一下午。换成 safetensors 之后这些全没了。这份笔记记录的是 safetensors 跨平台部署在 Windows、Linux、macOS 三个系统上的完整过程可以直接当实操手册用。原因很简单pickle 序列化的是 Python 对象反序列化那一刻就能执行代码谁拿到这个文件谁就握住一把后门钥匙safetensors 只存纯张量字节读取路径不跑任何用户代码同一份文件在三个平台上字节级一致。把它当 pickle 替代方案直接换上就行。 一条命令装完三大系统PyPI 上有现成预编译 wheel一条命令通吃三平台这份 safetensors 部署指南的前置条件基本就一条pip install safetensors平台差异只在这几行备注里三平台直接装 wheel不需要 Rust 编译器源码编译属于少见场景。Windows真要源码编译时先装 Rust 工具链再装 Visual Studio Build Tools。Linuxpip 开箱即用老发行版可能要先补 Python 3 开发头文件和 pip。macOSIntel 或 Apple SiliconHomebrew 的 Python 加 pip 就够不用额外配置。 跨平台兼容性靠什么撑住safetensors 做跨平台张量存储靠的是规范在格式层钉死了四件事字节序统一小端读取时不做任何转换三大平台原生就是小端。文件布局JSON 头加二进制 buffer头里声明每个张量的 dtype、shape 和字节偏移数据区是纯连续字节。类型映射F16/F32/F64/I32 等 dtype 在 torch、numpy、tensorflow、flax、paddle 之间一一对应命名统一。内存对齐头部偏移按 dtype 对齐mmap 零拷贝加载在三台系统上都能直接工作解析逻辑是纯 Rust 实现没有平台相关的依赖。⚡ 五分钟跑通保存→加载最小闭环Mac 开发机上保存把同一个文件发到 Windows 笔记本和 Linux CI各跑一遍import torch from safetensors.torch import save_file from safetensors import safe_open tensors {w1: torch.zeros(1024, 1024), w2: torch.ones(512, 512)} save_file(tensors, model.safetensors) # framework: 绑定哪个框架三系统用 pt 就够 # device: 跨平台敏感参数纯 CPU 机器固定传 cpu with safe_open(model.safetensors, frameworkpt, devicecpu) as f: for k in f.keys(): print(k, f.get_slice(k).get_shape())Mac 上保存、Windows 上加载、Linux 里再跑一遍三次打印一字不差safetensors 跨平台加载就是这么无脑。️ 踩坑速查出问题时先对表下面这几个坑基本都被人踩过无数遍现象解法Windows 源码编译报 cargo 或编译错误rustup 装 Rust 加 Visual Studio Build Toolscargo 找不到就把它加入 PATH 重开终端pip 安装报 PermissionError用 venv 或 conda 建环境或给 pip 加--userLinux 源码编译缺头文件sudo apt install build-essentialyum 系装 Development Tools模块能导入但框架后端为 None带 extras 安装例如pip install safetensors[torch] 团队落地清单主流程跑通之后把这几条钉进团队规范后面就没人再踩版本锁定lock 文件里钉死 safetensors 版本训练侧和推理侧保持同一版本。环境隔离按项目走 venv 或 conda别让多个框架后端互相污染。CI 交叉验证流水线里至少留一个 Windows runner做保存→加载往返比对。文件校验产物里带上 safetensors 文件的 sha256接收方先验签再加载。存量迁移仓库 bindings/python 下的 convert.py 可以批量把 pickle 转成 safetensors。同一份文件、三个系统、零转换。保存一次哪里都能读对面机器上也不会执行任何来路不明的代码——下次再有人递给你 pickle直接把这句话甩过去以后都用 safetensors。【免费下载链接】safetensorsSimple, safe way to store and distribute tensors项目地址: https://gitcode.com/GitHub_Trending/sa/safetensors创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表