快速入门Safetensors

news2025/1/20 5:51:38

快速入门Safetensors

    • 什么是Safetensors
    • 架构
    • 常用操作
    • 速度对比
    • 彩蛋

Safetensors官方网址

什么是Safetensors

Safetensors是一种新的简单格式,用于安全存储张量(与pickle相反),而且速度仍然很快(零拷贝)。

架构

在这里插入图片描述

常用操作

# pip install safetensors

# Load
from safetensors import safe_open

tensors = {}
with safe_open("model.safetensors", framework="pt", device=0) as f:
    for k in f.keys():
        tensors[k] = f.get_tensor(k)
        
# Loading only part of the tensors (interesting when running on multiple GPU)
from safetensors import safe_open

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

# save
import torch
from safetensors.torch import save_file

tensors = {
    "embedding": torch.zeros((2, 2)),
    "attention": torch.zeros((2, 3))
}
save_file(tensors, "model.safetensors")

速度对比

  • cpu

Loaded safetensors 0:00:00.004015
Loaded pytorch 0:00:00.307460
on CPU, safetensors is faster than pytorch by: 76.6 X

  • gpu

Loaded safetensors 0:00:00.165206
Loaded pytorch 0:00:00.353889
on GPU, safetensors is faster than pytorch by: 2.1 X

彩蛋

Lora的Safetensors格式存储有训练时的元数据信息

代码来自sd-web-ui项目源码

def read_metadata_from_safetensors(filename):
    import json

    with open(filename, mode="rb") as file:
        metadata_len = file.read(8)
        metadata_len = int.from_bytes(metadata_len, "little")
        json_start = file.read(2)

        assert metadata_len > 2 and json_start in (b'{"', b"{'"), f"{filename} is not a safetensors file"
        json_data = json_start + file.read(metadata_len-2)
        json_obj = json.loads(json_data)

        res = {}
        for k, v in json_obj.get("__metadata__", {}).items():
            res[k] = v
            if isinstance(v, str) and v[0:1] == '{':
                try:
                    res[k] = json.loads(v)
                except Exception:
                    pass

        return res
import sys
print(read_metadata_from_safetensors(sys.argv[1]))
{
      "ss_sd_model_name": "dream-shaper-5.ckpt",
      "ss_resolution": "(512, 512)",
      "ss_clip_skip": "2",
      "ss_num_train_images": "5000",
      "ss_tag_frequency": {
        "100_coloredic0n": {
          "coloredic0n icon a white ambulance with red stripe on it": 1,
          "coloredic0n icon a brown backpack": 1,
          "coloredic0n icon a banana peel": 1,
          "coloredic0n icon a battery with a lightning on it": 1,
          "coloredic0n icon a bed with a pillow on it": 1,
          "coloredic0n icon a red book with the words on it": 1,
          "coloredic0n icon a cabbage with green leaves": 1,
          "coloredic0n icon a cactus plant in a pot": 1,
          "coloredic0n icon a cassette tape": 1,
          "coloredic0n icon a  champagne bottle": 1,
          "coloredic0n icon a piece of cheese": 1,
          "coloredic0n icon a squirrel sitting with a nut in its hands": 1,
          "coloredic0n icon a cookie with a chocolate chip on top": 1,
          "coloredic0n icon a red price percent symbol on it": 1,
          "coloredic0n icon a fence": 1,
          "coloredic0n icon a red fire hydrant": 1,
          "coloredic0n icon a woman with long hair smiling and wearing a pink shirt": 1,
          "coloredic0n icon a pair of glasses": 1,
          "coloredic0n icon a pink jellyfish floating in the air": 1,
          "coloredic0n icon a ladybug with a black and red pattern on it": 1,
          "coloredic0n icon a green lawnmower": 1,
          "coloredic0n icon a carton of milk with a cap on top": 1,
          "coloredic0n icon a bowl of noodles with peas and tomatoes": 1,
          "coloredic0n icon a notebook with a pen on top of it": 1,
          "coloredic0n icon a onion": 1,
          "coloredic0n icon a padlock": 1,
          "coloredic0n icon a panda face": 1,
          "coloredic0n icon a blue pen": 1,
          "coloredic0n icon a pencil": 1,
          "coloredic0n icon a black power plug": 1,
          "coloredic0n icon a rat with a long tail": 1,
          "coloredic0n icon a raven": 1,
          "coloredic0n icon a rifle with a bullets": 1,
          "coloredic0n icon a red and white rocket ship": 1,
          "coloredic0n icon a red rose with green leaves": 1,
          "coloredic0n icon a yellow rubber duck": 1,
          "coloredic0n icon a sneaker with a red and white sole": 1,
          "coloredic0n icon a green snail with a yellow shell": 1,
          "coloredic0n icon a pair of socks with a red and white design": 1,
          "coloredic0n icon a brown couch with pillows and a pillow on it": 1,
          "coloredic0n icon a grey sofa with pillows and a pillow on it": 1,
          "coloredic0n icon a sunflower": 1,
          "coloredic0n icon a yellow ticket with a star on it": 1,
          "coloredic0n icon a toilet seat with a lid up": 1,
          "coloredic0n icon a wood log": 1,
          "coloredic0n icon a red and white target with an arrow in the center": 1,
          "coloredic0n icon a bucket filled with water": 1,
          "coloredic0n icon a calendar": 1,
          "coloredic0n icon a red pencil sharper with a metal blade": 1,
          "coloredic0n icon a red and white and red megaphone": 1
        }
      },
      "ss_batch_size_per_device": "2",
      "ss_bucket_info": "null",
      "ss_bucket_no_upscale": "False",
      "ss_cache_latents": "True",
      "ss_caption_dropout_every_n_epochs": "0",
      "ss_caption_dropout_rate": "0.0",
      "ss_caption_tag_dropout_rate": "0.0",
      "ss_color_aug": "False",
      "ss_dataset_dirs": {
        "100_coloredic0n": {
          "n_repeats": 100,
          "img_count": 50
        }
      },
      "ss_enable_bucket": "False",
      "ss_epoch": "1",
      "ss_face_crop_aug_range": "None",
      "ss_flip_aug": "False",
      "ss_full_fp16": "False",
      "ss_gradient_accumulation_steps": "1",
      "ss_gradient_checkpointing": "False",
      "ss_keep_tokens": "0",
      "ss_learning_rate": "0.0001",
      "ss_lowram": "False",
      "ss_lr_scheduler": "constant",
      "ss_lr_warmup_steps": "0",
      "ss_max_bucket_reso": "None",
      "ss_max_grad_norm": "1.0",
      "ss_max_token_length": "None",
      "ss_max_train_steps": "2500",
      "ss_min_bucket_reso": "None",
      "ss_min_snr_gamma": "None",
      "ss_mixed_precision": "bf16",
      "ss_network_alpha": "Dynamic",
      "ss_network_dim": "Dynamic",
      "ss_network_module": "networks.lora",
      "ss_new_sd_model_hash": "ffad8f3da766de2a56343e388df43941ee27143a03c596e0b8f06976d4fa52e9",
      "ss_noise_offset": "None",
      "ss_num_batches_per_epoch": "2500",
      "ss_num_epochs": "1",
      "ss_num_reg_images": "0",
      "ss_optimizer": "bitsandbytes.optim.adamw.AdamW8bit",
      "ss_output_name": "Colored_Icons",
      "ss_prior_loss_weight": "1.0",
      "ss_random_crop": "False",
      "ss_reg_dataset_dirs": {},
      "ss_sd_model_hash": "02a6900f",
      "ss_sd_scripts_commit_hash": "9533285e998c74b0e18d114aea71f7143c8f3fa9",
      "ss_seed": "1234",
      "ss_session_id": "2548637574",
      "ss_shuffle_caption": "False",
      "ss_text_encoder_lr": "5e-05",
      "ss_total_batch_size": "2",
      "ss_training_comment": "Dynamic resize with sv_fro: 0.9 from 128; None",
      "ss_training_finished_at": "1683314416.566944",
      "ss_training_started_at": "1683312438.3090656",
      "ss_unet_lr": "0.0001",
      "ss_v2": "False",
      "sshs_legacy_hash": "a45a7daa",
      "sshs_model_hash": "6a455e4a89e4c0cbb5985bf8ebb96397e61bb4b8431b121281d6ec796daecae1"
    }

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

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

相关文章

形态学算法之边界提取的简单python实现——图像处理

原理 图像处理中的边界提取是一项基本而重要的任务,主要用于识别和提取图像中物体的轮廓或边界。 具体流程 1.边缘检测 边界提取的第一步通常是边缘检测。边缘是图像亮度变化显著的地方,是物体与背景或不同物体间的分界线。边缘检测算法通过识别图像中…

最近vscode链接Autodl出现的问题

最近vscode链接Autodl出现的问题 一、问题的概述 在使用vscode连接autodl远程服务器的时候,在vscode的右下角出现了,以下的问题提示: 远程主机可能不符合glibc和libstdc VS Code服务器的先决条件 二、问题的原因 vscode版本过高的问题&…

代码随想录第15题三数之和去重理解

在代码随想录第15题中,对三数之和三元组进行去重时,出现了这样一行代码 nums[i]!nums[i-1] 是为了对和为0的三元组进行去重。 为什么要这样写,为什么敢这样写,下面进行分析。 如上图所示,本题采用了双指针法。i为从…

零基础学Python(9)— 流程控制语句(下)

前言:Hello大家好,我是小哥谈。流程控制语句是编程语言中用于控制程序执行流程的语句,本节课就带大家认识下Python语言中常见的流程控制语句!~🌈 目录 🚀1.while循环 🚀2.for循环 &#x1…

JAVA设计模式之建造者模式详解

建造者模式 1 建造者模式介绍 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式. 定义: 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 **建造者模式要解决的问题 ** 建造者模式可以将部件和其组装过程分开…

【GoogleAdmob接入后续】app-ads.txt以及部署Firebase Hosting

目录 一、创建app-ads.txt 二、部署Firebase Hosting云服务(仅仅使用它作为一个公开的站点来让Google Admob能访问到app-ads.txt) 三、收尾工作 一、创建app-ads.txt 创建txt文件,命名app-ads,后缀txt,内容需去到G…

【QT】day6

#include "home.h" #include "ui_home.h"Home::Home(QWidget *parent): QWidget(parent), ui(new Ui::Home) {ui->setupUi(this);// 从配置文件读取用户名QSettings settings("kim", "ad");username settings.value("usernam…

Python 数据可视化:配色方案

1、引言 在这篇文章中,我们将研究Python的一些配色方案,主要是Seaborn库。这将采用 Python Notebook 格式,其中包括绘图的代码。 2、实验数据 首先导入必要的库: import pandas as pd import seaborn as sns import matplotlib…

腾讯云游戏服务器购买入口,详细配置精准报价

2024年更新腾讯云游戏联机服务器配置价格表,可用于搭建幻兽帕鲁、雾锁王国等游戏服务器,游戏服务器配置可选4核16G12M、8核32G22M、4核32G10M、16核64G35M、4核16G14M等配置,可以选择轻量应用服务器和云服务器CVM内存型MA3或标准型SA2实例&am…

Backtrader 文档学习- Plotting

Backtrader 文档学习- Plotting 虽然回测是一个基于数学计算的自动化过程,还是希望实际通过可视化验证。无论是使用现有算法回测,还是观察数据驱动的指标(内置或自定义)。 凡事都要有人完成,绘制数据加载、指标、操作…

Vuex介绍和使用

1. 什么是Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式和库。它解决了在大型 Vue.js 应用程序中共享和管理状态的问题,使得状态管理变得更加简单、可预测和可维护。 在 Vue.js 应用中,组件之间的通信可以通过 props 和事件进行&#xff0c…

微信小程序(三十四)搜索框-带历史记录

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.搜索框基本模板 2.历史记录基本模板 3.细节处理 源码&#xff1a; index.wxml <!-- 1.点击搜索按钮a.非空判断b.历史记录&#xff08;去重&#xff09;c.清空搜索框d.去除前后多余空格2.删除搜索 3.无搜索…

【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏3(附项目源码)

最终效果 文章目录 最终效果系列目录前言随着地面法线旋转在地形上随机生成动物不同部位颜色不同最终效果源码完结系列目录 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第24篇中,我们将探索如何用unity制作一…

肯尼斯·里科《C和指针》第13章 高级指针话题(3)命令行参数

处理命令行参数是指向指针的指针的另一个用武之地。有些操作系统&#xff0c;包括UNIX和MS-DOS&#xff0c;让用户在命令行中编写参数来启动一个程序的执行。这些参数被传递给程序&#xff0c;程序按照它认为合适的任何方式对它们进行处理。 13.4.1 传递命令行参数 这些参数如何…

BestEdrOfTheMarket:一个针对AVEDR绕过的训练学习环境

关于BestEdrOfTheMarket BestEdrOfTheMarket是一个针对AV/EDR绕过的训练学习环境&#xff0c;广大研究人员和信息安全爱好者可以使用该项目研究和学习跟AV和EDR绕过相关的技术知识。 支持绕过的防御技术 1、多层API钩子&#xff1b; 2、SSH钩子&#xff1b; 3、IAT钩子&#x…

比较6*6范围内7个点182个结构的顺序

( A, B )---6*30*2---( 1, 0 )( 0, 1 ) 让网络的输入有6个节点&#xff0c;训练集AB各由6张二值化的图片组成&#xff0c;让A中有7个点&#xff0c;让B全是0&#xff0c;收敛误差7e-4&#xff0c;收敛199次&#xff0c;统计迭代次数平均值并排序。 得到顺序为 用6个点的结构标…

【开源】JAVA+Vue.js实现在线课程教学系统

目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2.3 课时管理模块2.4 课程交互模块2.5 系统基础模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示4.1 管理后台4.2 用户网页 五、样例代码5.1 新增课程类型5.2 网站登录5.3 课…

初识NodeJS

本文主要基于极客时间《Nodejs开发实战》课程。 本篇&#xff08;一&#xff09;为课程的第二篇——技术预研篇。 什么是Nodejs? 来源官网&#xff1a; Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型&#x…

备战蓝桥杯---动态规划(基础1)

先看几道比较简单的题&#xff1a; 直接f[i][j]f[i-1][j]f[i][j-1]即可&#xff08;注意有马的地方赋值为0&#xff09; 下面是递推循环方式实现的AC代码&#xff1a; #include<bits/stdc.h> using namespace std; #define int long long int a[30][30]; int n,m,x,y; …

HTTP2:netty http2 StreamChannel多流实现与Http2StreamFrame解码器的源码分析

netty http2 server侧的核心逻辑个人认为&#xff0c;主要在编解码处理器和Stream Transform Channel这块&#xff0c;分别处理Http2 消息帧的编解码&#xff0c;以及连接的多流处理机制。对应用的处理类分别&#xff1a; ChannelHandlerDescio.netty.handler.codec.http2.Htt…