sdxl量化加速笔记

文章目录

    • 一、量化加速sdxl模型
      • 1)涉及模型
      • 2)环境安装
      • 3)转换模型safetensor to pytorch文件
      • 4)tensorRT的环境准备
        • (1)下载tensorRT 10.10
        • (2)下载cuda

一、量化加速sdxl模型

1)涉及模型

  • 涉及模型
waiNSFWIllustrious_v120.safetensors
anyloraCheckpoint_bakedvaeBlessedFp16.safetensors

2)环境安装

torch>=1.9.0
safetensors>=0.3.0 
numpy==2.2.6

3)转换模型safetensor to pytorch文件

  • 转换指令
python3 safetensor_to_pytorch_converter.py
  • 代码
#!/usr/bin/env python3
"""
Safetensor to PyTorch Converter
支持将safetensor格式的模型文件转换为PyTorch格式
"""import os
import sys
import argparse
from pathlib import Path
import torch
from safetensors.torch import load_file, save_file
import logging# 设置日志
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)def convert_safetensor_to_pytorch(safetensor_path, output_path=None):"""将safetensor文件转换为PyTorch格式Args:safetensor_path (str): safetensor文件路径output_path (str, optional): 输出文件路径,如果为None则自动生成Returns:str: 输出文件路径"""try:# 检查输入文件是否存在if not os.path.exists(safetensor_path):raise FileNotFoundError(f"文件不存在: {safetensor_path}")# 如果未指定输出路径,自动生成if output_path is None:input_path = Path(safetensor_path)output_path = input_path.with_suffix('.pth')logger.info(f"正在加载safetensor文件: {safetensor_path}")# 加载safetensor文件state_dict = load_file(safetensor_path)logger.info(f"模型包含 {len(state_dict)} 个参数")# 保存为PyTorch格式torch.save(state_dict, output_path)logger.info(f"转换完成,保存到: {output_path}")# 显示文件大小信息input_size = os.path.getsize(safetensor_path) / (1024 * 1024)  # MBoutput_size = os.path.getsize(output_path) / (1024 * 1024)  # MBlogger.info(f"输入文件大小: {input_size:.2f} MB")logger.info(f"输出文件大小: {output_size:.2f} MB")return output_pathexcept Exception as e:logger.error(f"转换失败: {str(e)}")raisedef convert_specific_models():"""转换指定的两个模型文件"""	models_to_convert = ["/home/fun/tensor_pic/safe_models/waiNSFWIllustrious_v120.safetensors","/home/fun/tensor_pic/safe_models/anyloraCheckpoint_bakedvaeBlessedFp16.safetensors"]converted_files = []for model_name in models_to_convert:if os.path.exists(model_name):logger.info(f"开始转换: {model_name}")try:output_file = convert_safetensor_to_pytorch(model_name)converted_files.append(output_file)logger.info(f"✅ {model_name} 转换成功")except Exception as e:logger.error(f"❌ {model_name} 转换失败: {str(e)}")else:logger.warning(f"⚠️  文件不存在: {model_name}")return converted_filesdef main():parser = argparse.ArgumentParser(description='将safetensor文件转换为PyTorch格式')parser.add_argument('--input', '-i', type=str, help='输入的safetensor文件路径')parser.add_argument('--output', '-o', type=str, help='输出的PyTorch文件路径')parser.add_argument('--convert-specific', action='store_true', help='转换指定的两个模型文件')args = parser.parse_args()try:if args.convert_specific:logger.info("开始转换指定的模型文件...")converted_files = convert_specific_models()if converted_files:logger.info(f"成功转换 {len(converted_files)} 个文件:")for file in converted_files:logger.info(f"  - {file}")else:logger.warning("没有成功转换任何文件")elif args.input:# 转换单个文件output_file = convert_safetensor_to_pytorch(args.input, args.output)logger.info(f"转换完成: {output_file}")else:# 默认转换指定模型logger.info("未指定参数,开始转换指定的模型文件...")convert_specific_models()except KeyboardInterrupt:logger.info("用户中断操作")sys.exit(1)except Exception as e:logger.error(f"程序执行失败: {str(e)}")sys.exit(1)if __name__ == "__main__":main() 
  • 输出
(tensor_sd_xl) fun@fun:~/tensor_pic/safe2pytorch_tool$ python3 safetensor_to_pytorch_converter.py 
2025-07-31 13:02:27,927 - INFO - 未指定参数,开始转换指定的模型文件...
2025-07-31 13:02:27,927 - INFO - 开始转换: /home/fun/tensor_pic/safe_models/waiNSFWIllustrious_v120.safetensors
2025-07-31 13:02:27,927 - INFO - 正在加载safetensor文件: /home/fun/tensor_pic/safe_models/waiNSFWIllustrious_v120.safetensors
2025-07-31 13:02:27,945 - INFO - 模型包含 2515 个参数
2025-07-31 13:02:31,083 - INFO - 转换完成,保存到: /home/fun/tensor_pic/safe_models/waiNSFWIllustrious_v120.pth
2025-07-31 13:02:31,084 - INFO - 输入文件大小: 6616.63 MB
2025-07-31 13:02:31,084 - INFO - 输出文件大小: 6617.17 MB
2025-07-31 13:02:31,084 - INFO - ✅ /home/fun/tensor_pic/safe_models/waiNSFWIllustrious_v120.safetensors 转换成功
2025-07-31 13:02:31,084 - INFO - 开始转换: /home/fun/tensor_pic/safe_models/anyloraCheckpoint_bakedvaeBlessedFp16.safetensors
2025-07-31 13:02:31,085 - INFO - 正在加载safetensor文件: /home/fun/tensor_pic/safe_models/anyloraCheckpoint_bakedvaeBlessedFp16.safetensors
2025-07-31 13:02:31,092 - INFO - 模型包含 1143 个参数
2025-07-31 13:02:32,022 - INFO - 转换完成,保存到: /home/fun/tensor_pic/safe_models/anyloraCheckpoint_bakedvaeBlessedFp16.pth
2025-07-31 13:02:32,022 - INFO - 输入文件大小: 2033.85 MB
2025-07-31 13:02:32,022 - INFO - 输出文件大小: 2034.11 MB
2025-07-31 13:02:32,023 - INFO - ✅ /home/fun/tensor_pic/safe_models/anyloraCheckpoint_bakedvaeBlessedFp16.safetensors 转换成功
(tensor_sd_xl) fun@fun:~/tensor_pic/safe2pytorch_tool$ 

4)tensorRT的环境准备

(1)下载tensorRT 10.10

[链接]

在这里插入图片描述
命令安装这个包

1、安装包
sudo dpkg -i nv-tensorrt-local-repo-ubuntu2204-10.10.0-cuda-12.9_1.0-1_amd64.deb
2、查看 TensorRT 包是否可用:如果能看到 libnvinfer、libnvinfer-dev 等相关包,说明源添加成功
apt-cache search tensorrt
如果没有输出,说明还没安装。
3、安装 TensorRT:
sudo apt update
sudo apt install libnvinfer-dev libnvinfer-plugin-dev python3-tensorrt
4、安装完成后再用第2步命令检查
apt-cache search tensorrt
验证 Python TensorRT 是否可用
python3 -c "import tensorrt; print(tensorrt.__version__)"
如果能输出版本号,说明 Python TensorRT 安装成功。
(2)下载cuda

12.9 cuda链接

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.9.1/local_installers/cuda-repo-ubuntu2204-12-9-local_12.9.1-575.57.08-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-9-local_12.9.1-575.57.08-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-12-9-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-9

在这里插入图片描述

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

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

相关文章

西门子 G120 变频器全解析:从认知到参数设置

在工业自动化领域,变频器作为电机驱动的核心设备,其稳定运行与精准控制直接影响生产效率。西门子 G120 变频器凭借可靠性能与灵活配置,成为众多工业场景的优选。本文将从基础认知、操作面板到参数设置,全方位带你掌握 G120 变频器…

【自动化运维神器Ansible】YAML支持的数据类型详解:构建高效Playbook的基石

目录 1 YAML数据类型概述 1.1 为什么数据类型很重要? 1.2 YAML数据类型分类 2 标量类型(Scalars) 2.1 字符串(String) 2.2 布尔值(Boolean) 2.3 数值(Numbers) 2…

基于岗位需求的康养休闲旅游服务实训室建设方案

一、康养休闲旅游服务实训室建设方案建设需求分析康养休闲旅游服务行业的快速发展对技能人才提出了精准化、场景化的能力要求,康养休闲旅游服务实训室建设方案需紧密对接健康咨询、接待服务、康乐服务等核心岗位群的实际需求。从岗位技能来看,健康咨询岗…

MES 与工业物联网(IIoT)的化学反应:为何是智能工厂的 “神经中枢”?

从“被动救火”到“主动预警”的工厂革命想象一下,当你正在家中熟睡时,智能手环突然震动,提醒你心率异常;早上出门前,手机 APP 告诉你爱车的某个零件即将达到磨损极限,建议及时更换。这些日常生活中的智能预…

工作好用小工具积累

1、内部环境太多,网站导航git地址:https://github.com/hslr-s/sun-panel/releases gitee地址:https://gitee.com/luofei1284999247/sun-panel

智能Agent场景实战指南 Day 26:Agent评估与性能优化

【智能Agent场景实战指南 Day 26】Agent评估与性能优化 开篇 欢迎来到"智能Agent场景实战指南"系列的第26天!今天我们将深入探讨智能Agent的评估方法与性能优化技术。构建高效、可靠的智能Agent系统需要完善的评估体系和优化策略,本文将系统…

机器学习——下采样(UnderSampling),解决类别不平衡问题,案例:逻辑回归 信用卡欺诈检测

过采样: 机器学习——过采样(OverSampling),解决类别不平衡问题,案例:逻辑回归 信用卡欺诈检测-CSDN博客 (完整代码在底部) 使用下采样解决类别不平衡问题 —— 以信用卡欺诈识别为…

Qt 槽函数被执行多次,并且使用Qt::UniqueConnection无效【已解决】

Qt 槽函数被执行多次,并且使用Qt::UniqueConnection无效引言一、问题描述二、解决方案三、深入了解信号和槽绑定机制引言 之前刚遇到 - 信号和槽正常连接返回true,但发送信号后槽函数无响应问题,现在又遇到槽函数执行多次,使用Qt…

Autosar Nm-网管报文PNC停发后无法休眠问题排查

文章目录前言Autosar CanNm标准中的相关参数CanNmAllNmMessagesKeepAwakePN过滤功能CanNm_ConfirmPnAvailability问题描述问题原因排查解决方案扩展总结前言 Autosar Nm中针对于支持PN功能的收发器,要求PNC停发后允许进入休眠模式,开发过程中遇到PNC停发…

RK3568下的进程间通信:基于UDP的mash网络节点通信

基于UDP的mash网络节点通信系统实现: 最近的项目中需要实现一个功能,类似mash网络的功能,比如 类似下图中的多个节点之间,相互之间通信, 节点A自身的通信列表中,只有B和C,所以A发出的消息给B和C,依次类推,A发送的消息所有节点都能收到,同理,其他节点比如K节点发送的…

Effective C++ 条款17:以独立语句将newed对象置入智能指针

Effective C 条款17:以独立语句将newed对象置入智能指针核心思想:使用智能指针管理动态分配的对象时,必须确保new操作与智能指针构造在同一独立语句中完成,避免编译器优化顺序导致的内存泄漏。 ⚠️ 1. 跨语句初始化的危险性 资源…

Linux iptables防火墙操作

资料: 网络运维相关 - iptables 【Main】 https://www.zsythink.net/archives/tag/iptables/ netfilter 在 Linux 内核 TCP/IP协议栈中的位置 【框架】【Aulaxiry】 https://zhuanlan.zhihu.com/p/93630586 1 概念详解 ● 防火墙概念 ○ 主机防火墙 网络防火墙 ○…

飞书推送工具-自动化测试发送测试报告一种方式

飞书推送工具 要获取飞书开发所需的 APP_ID、APP_SECRET 以及用户的 USER_ID,需通过飞书开放平台和飞书客户端的相关设置操作。以下是详细步骤: 一、获取 APP_ID 和 APP_SECRET(飞书应用凭证) APP_ID 和 APP_SECRET 是飞书开放…

从零开始的云计算生活——第三十七天,跬步千里,ansible之playbook

目录 一.故事剧情 二.Playbook简介 三.Playbook核心元素(重要) 四.Playbook语法 五.Playbook的运行方式 六.Playbooks中tasks语法使用 1、file 2、lineinfile 3、replace 4、shell 5、debug 6、template/copy 7、fetch 8、unarchive 9、wait_for 10、yum 11、…

AI驱动下的数据新基建:腾讯游戏数据资产治理与湖仓架构革新

在大模型技术迅猛发展的今天,AI 正深度重塑数据基础设施,推动其向智能化快速演进。如何将 AI 深度融入数据管理,释放数据的潜在价值、提升运营效率,成为企业在构建 AI 驱动的数据资产管理体系的核心问题。在近期举办的“DataFun A…

ubuntu 系统风扇控制软件 CoolerControl

背景 A6000显卡的温度一直都是86度左右,GPU的风扇转速不够大。 我首先把 nvidia的驱动更新了,但是发现风扇依然依然保持在较低的转速。 后面无意间搜到了CoolerControl 这个linux平台的风扇控制软件。设置之后,增加了风扇的转速,…

Oracle 11gR2 Clusterware应知应会

Oracle 11gR2 Clusterware应知应会 关键特性 启动顺序 日志路径 资源状态 资源管理 关键特性 📖 Oracle 11gR2 Clusterware的一些关键特性如下: 在安装运行11gR2的Real Application Clusters数据库之前需要先安装11gR2 Clusterware。 GRID home包括Oracle Clusterware和AS…

微信小程序苹果手机和安卓,怎么做适配

1. 基于 rpx 单位进行布局适配微信小程序采用 rpx 作为尺寸单位,以实现不同设备的布局适配。小程序的屏幕宽度固定为 750rpx,在不同设备上通过动态计算 1rpx 对应的像素值进行适配。例如,在 iPhone 6 中,屏幕宽度为 375px&#xf…

XGBoost三部曲:XGBoost参数详解

之前已经介绍了XGBoost三部曲:XGBoost原理。本文详细介绍XGBoost参数,让大家在使用XGBoost的过程中能得心应手。后续会更新XGBoost实战,敬请期待。 文章目录 一、核心概念回顾 二、XGBoost算法参数整体介绍 1 原生接口和Scikit-learn接口的区别 2 参数分类详解 三、核心Boos…

【python】转移本地安装的python包

我们现在需要将某个环境已经安装的 python 包离线传递到另外一个环境,且确保这种安装行为最终不需要对 PYPI 中央仓库的有效连接,也能完成。下面给出两种办法: docker container 如果你的 python 环境位于某个容器内,那最好的办法…