safetensors介绍

1 介绍

safetensors 是 Huggingface 推出的一种可靠、易移植的机器学习模型存储格式,用于安全地存储 Tensor,而且速度很快(零拷贝)。

safetensors 格式结构:
在这里插入图片描述

  • 8 bytes:一个无符号的整数,表示 header 占的字节数
  • N bytes:JSON UTF-8 字符串,存储 header 的内容,形如:
{'__metadata__': {'format': 'pt'},'model.layers.0.attention.wo.weight': {'dtype': 'BF16','shape': [4096, 4096],'data_offsets': [0, 33554432],}, 'model.layers.0.attention.wqkv.weight': {'dtype': 'BF16','shape': [6144, 4096],'data_offsets': [33554432, 83886080]},
}
  • Rest of the file:存储 tensor 的数据

2 使用

2.1 安装

使用pip安装:

pip install safetensors
2.2 tensor 保存为 safetensors
import torch
from safetensors.torch import save_filetensors = {"embedding": torch.zeros((10, 2)),"attention": torch.zeros((10, 3))
}
save_file(tensors, "model.safetensors")
2.3 从 safetensors 加载 tensor
from safetensors import safe_opentensors = {}
with safe_open("model.safetensors", framework="pt", device=0) as f:for k in f.keys():tensors[k] = f.get_tensor(k)print(f"{k}: {tensors[k]}")

3 safetensors 的主要优点

3.1 安全

使用 torch.load 加载模型权重可能会执行被插入的恶意代码,不过可以设置weights_only=False 避免这个问题。safetensors 一方面,通过限制文件头大小为100MB以阻止极端大JSON的生成。另一方面,当读取文件时,限制文件地址不被覆盖,使其在载入过程中不会在内存中超出文件大小。

3.2 速度快

对机器学习常用格式中,PyTorch似乎是加载最快的文件格式。而Safetensors通过跳过额外的CPU拷贝,在常规Linux硬件上的载入速度是PyTorch的2倍。

  • CPU 上加载提速的原因:通过直接映射文件,避免了不必要的复制(zero copy)
  • GPU 上加载提速的原因:跳过不必要的内存分配
3.3 惰性加载

可以在不加载整个文件的情况下查看文件的信息,或者只加载文件中的部分张量而不是所有张量。在多节点或多GPU的分布式设置下,不同模型可以仅仅加载文件中的部分tensors。

from safetensors import safe_opentensors = {}
with safe_open("model.safetensors", framework="pt", device=0) as f:tensor_slice = f.get_slice("embedding")print("tensor_slice: ", tensor_slice)vocab_size, hidden_dim = tensor_slice.get_shape()print("vocab_size: ", vocab_size)tensor = tensor_slice[:, :hidden_dim]print("tensor: ", tensor)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/15303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo源码及总结

Springboot整合Dubbo启动解析Bean定义 根据springboot启动原理,会先把启动类下的所有类先进行解析bean定义,所以要先EnableDubbo这个注解,再根据这个注解里面的注解,可以知道import的两个类DubboComponentScanRegistrar和DubboCo…

输入一串字符,输入想要字符串前*的个数n,判断字符串前*的个数是大于n还是小于n,如果大于n则删除多余的*其它保持不变,如果小于n,则字符串也保持不变

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void fun(char* a, int n) {int i 0, j 0, m 0,b0,c0;char* p;p a;//第一步&#xff0c;判断字母前面有多少个*while (p[i] *){j;}printf("字母前*的个数%d\n",j);//求总的字符串长度while (a[m] !…

【全开源】沃德商协会管理系统源码(FastAdmin+ThinkPHP+Uniapp)

一款基于FastAdminThinkPHPUniapp开发的商协会系统&#xff0c;新一代数字化商协会运营管理系统&#xff0c;以“智慧化会员体系、智敏化内容运营、智能化活动构建”三大板块为基点&#xff0c;实施功能全场景覆盖&#xff0c;一站式解决商协会需求壁垒&#xff0c;有效快速建立…

护眼小贴士:学生如何正确使用台灯?

随着电子设备的普及和长时间的用眼&#xff0c;长时间盯着屏幕或学习&#xff0c;眼睛需要不断调节焦距&#xff0c;导致眼睛肌肉疲劳&#xff0c;进而引发视力下降。这种现象在年轻一代甚至青少年中尤为普遍&#xff0c;这种疲劳状态不仅影响眼睛的舒适度&#xff0c;还会导致…

linux配置防火墙端口

配置防火墙&#xff0c;添加或删除端口&#xff0c;需要有root权限。 防火墙常用命令如下&#xff1a; 1.查看防火墙状态&#xff1a; systemctl status firewalld active(running)&#xff1a;开启状态&#xff0c;正在运行中 inactive(dead)&#xff1a;关闭状态&#xff…

十、OpenAI之视觉

视觉 学习怎样使用视觉能力理解图片 1. 介绍 GPT-4o和GPT-4 Turbo两个模型都拥有视觉能力&#xff0c;这意味着模型可以接收图片并回答关于图片的问题。从历史上看&#xff0c;语言模型系统被限制采用单一的文本输入方式。 2. 快速开始 模型使用图片主要有2种方式&#xff…

qml下拉条实现

qml下拉条实现 代码结构 代码结构 Rectangle里面嵌套一个Flickable&#xff0c;然后下面是一个Rectangle&#xff0c;作为滑动的区域&#xff0c;给最外层的Rectangle的y加一个属性动画。滑动区域写好onPressed和Onrelease即可。 import QtQuick 2.15 import QtQuick.Control…

从《红楼梦》的视角看大模型知识库 RAG 服务的 Rerank 调优

背景介绍 在之前的文章 有道 QAnything 源码解读 中介绍了有道 RAG 的一个主要亮点在于对 Rerank 机制的重视。 从目前来看&#xff0c;Rerank 确实逐渐成为 RAG 的一个重要模块&#xff0c;在这篇文章中就希望能讲清楚为什么 RAG 服务需要 Rerank 机制&#xff0c;以及如何选…

Redisson-分布式锁单Redis节点模式

Redisson-分布式锁单Redis节点模式 为什么要用分布式锁&#xff1f; 使用分布式锁的主要目的是为了解决多线程或多进程并发访问共享资源时可能出现的竞争条件和数据一致性问题。举一些实际场㬌&#xff1a; 数据库并发控制&#xff1a;在分布式系统中&#xff0c;多个节点同…

虚拟机上部署java微服务

在Windows服务器上安装Ubuntu系统&#xff0c;先安装虚拟机&#xff0c;然后再虚拟机上安装Ubuntu系统 启动虚拟机上的Ubuntu系统&#xff0c;然后安装jdk。安装好的Ubuntu系统是带桌面版的&#xff0c;需要打开 “终端” 控制台&#xff0c;通过命令行交互的方式部署程序&…

git 合并多个commit 使分支保持一次提交

1.控制台输入 git log 查看commit历史 找到历史提交sha 2.控制台输入 git rebase -i d0c5de8f7ca8e58fef347b36dd6b0f42f551cdb4 进入变基 3.输入英文i进入VM输入模式 4.保留第一行的pick 后面的pick改为s 5.esc退出输入模式 6.输入:wq保存退出 7.输入英文i进入VM输入模式…

从0开始实现一个博客系统 (SSM 实现)

相关技术 Spring Spring Boot Spring MVC MyBatis Html Css JS 实现功能 用户注册 - 密码加盐加密 (md5 加密)前后端用户信息存储 - 令牌技术用户登录 - (使用 拦截器 做登录校验)博客的增删改查后端数据返回前端, 采用 SpringBoot 做统一功能处理和统一异常处理 数据…

软考-程序员 知识点与部分真题梳理

软考-程序员 知识点与部分真题梳理 参照《程序员教程》第五版划分类别&#xff1b; 持续更新中… 计算机系统基础知识 如何理解和处理浮点数的加减法运算 在计算机科学中&#xff0c;处理浮点数的表示和运算是基础且关键的&#xff0c;尤其是在进行科学计算、图形处理和数据分…

V2I(车与基础设施)介绍

V2I&#xff08;车与基础设施&#xff09;介绍 一、V2I技术概述 V2I&#xff08;Vehicle-to-Infrastructure&#xff09;技术&#xff0c;全称汽车与基础设施通讯&#xff0c;也被称为信号灯系统。它通过无线通信技术&#xff0c;为车载智能交通运输系统设立了专门的通信频段…

【网络】为什么udp协议报头有长度字段,而tcp没有

引言&#xff1a; 在网络通信中&#xff0c;UDP&#xff08;用户数据报协议&#xff09;和TCP&#xff08;传输控制协议&#xff09;是两种常用的传输层协议。它们在设计和功能上有一些不同之处&#xff0c;其中之一就是报头中的长度字段。本文将深入探讨UDP和TCP协议中长度字…

SpringCloud Alibaba详解:打造高可用的分布式系统

SpringCloud Alibaba是一个基于Spring Cloud的微服务开发框架&#xff0c;它集成了阿里巴巴的一系列中间件和工具&#xff0c;能够快速构建高可用的分布式系统。在本文中&#xff0c;将详细介绍如何使用SpringCloud Alibaba来打造高可用的分布式系统&#xff0c;并通过代码案例…

第十一课,end关键字、简单while循环嵌套、初识for循环

一&#xff0c;end关键字 end关键字用于在print输出的内容后面声明结束的字符&#xff0c;我们之前学过并且十分了解print是默认输出内容之后跟着换行的&#xff0c;如果我们不希望换行而希望使用其它字符来代替换行&#xff0c;就可以用end关键字来实现 特殊的&#xff0c;en…

k8s笔记 | 高度调度

CronJob计划任务 简介&#xff1a;在k8s中周期性运行计划任务&#xff0c;与linux中的crontab相同&#xff1b;注意点 CornJob执行的时间是controller-manager的时间&#xff0c;所以一定要确保controller-manager的时间是准确的&#xff0c;另外cornjob cron表达式 文章参…

xjoi题库一级三段题解(c语言版)

浮点数 时间&#xff1a;0.2 空间&#xff1a;32M 题目描述&#xff1a; 小鹦鹉正在学习浮点数&#xff0c;你跟他说一个浮点数&#xff0c;他立刻就能学会。 输入一个浮点数&#xff0c;输出这个浮点数。 输入格式&#xff1a; 输入一个浮点数 输出格式&#xff1a; 输出一个…

2024.5.25AcWing刷题记录-排序篇

一、786. 第k个数 - AcWing题库 三路快速排序 import random def func(nums, start, end):if start > end:return idx random.randint(start, end)base nums[idx]i, j, m start, start, end 1while j < m:if nums[j] < base:nums[i], nums[j] nums[j], nums[i]…