diffusers单机多卡推理(全网首发)

起因

博主在部署InstantID项目时,显存不够,想要将模型分散在多张卡上。
翻到这篇发现是分布式推理,博主一直以为这个可以达到我想要的效果,但是效果是多线程并行推理,并不能将一个模型切片在多个GPU上。
Distributed Inference with 🤗 Accelerate
好运的是在Accelerate说明文档中我找到了下面的文章,使用init_empty_weights在加载模型时不加载权重,load_checkpoint_and_dispatch函数分发在不同机器上。
Handling big models for inference
在这里插入图片描述

经过

找打上述方法如获至宝,然后去尝试,直接改为StableDiffusionXLPipeline模型路径,不出意外失败。原因:StableDiffusionXLPipeline是多个模型组合而成,上述方法只加载unet模型是没问题的。 当我已经做好准备重写StableDiffusionXLPipeline去一个个实现,突然发现from_pretrained中存在device_map参数。幸福来的太突然了,直接官方做好集成了,device_map=‘auto’。果然不出意外还是出意外了。RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:1 and cuda:0! 我的理解是同一个模型不在一张卡上,auto应该是按层数拆的,但是一个transformer它是一整个块,被拆开会有问题(我是这么理解的,有懂的大神请指出谬误)。no_split_module_classes这个参数在指定单个模型时存在,但是StableDiffusionXLPipeline没有集成。
device_map 看帮助文档可以自己指定哪一层再哪个gpu,没有指定的层会报错如下异常:
在这里插入图片描述
通过异常我们再去指定层,直到没有异常,完美!但是问题来了,层数有点多的离谱不。果断放弃,这么干我宁愿改源码。改源码过程中我又发现如下代码,只用指定前缀就可以统一分配gpu!!!
请添加图片描述

结果

from diffusers import StableDiffusionXLPipeline
from accelerate import init_empty_weights,load_checkpoint_and_dispatch,load_checkpoint_in_model,dispatch_model
import torchmodel_path = "/workspace/InstantID/models/YamerMIX_v8"
# with init_empty_weights():
device_map = {'add_embedding': 1,'decoder': 1,'encoder': 1,'conv_in': 1,'conv_out': 1,'post_quant_conv': 1,'text_model': 1,'conv_norm_out': 1,'quant_conv': 1,'time_embedding': 1,'text_projection': 1,'up_blocks': 2,'mid_block': 2,'down_blocks': 2,
}
model = StableDiffusionXLPipeline.from_pretrained(model_path, torch_dtype=torch.float16, device_map=device_map)
prompt = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."
image = model(prompt=prompt, num_inference_steps=1, guidance_scale=0.0).images[0]

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

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

相关文章

Text2SQL研究-Chat2DB体验与剖析

文章目录 概要业务数据库配置Chat2DB安装设置原理剖析 小结 概要 近期笔者在做Text2SQL的研究,于是调研了下Chat2DB,基于车辆订单业务做了一些SQL生成验证,有了一点心得,和大家分享一下.: 业务数据库设置 基于车辆订…

Python(21)正则表达式中的“元字符”

大家好!我是码银🥰 欢迎关注🥰: CSDN:码银 公众号:码银学编程 获取资源:公众号回复“python资料” 在本篇文章中介绍的是正则表达式中一部分具有特殊意义的专用字符,也叫做“元…

一文学会Axios的使用

异步请求 同步发送请求过程如下 浏览器页面在发送请求给服务器,在服务器处理请求的过程中,浏览器页面不能做其他的操作。只能等到服务器响应结束后才能,浏览器页面才能继续做其他的操作。 异步发送请求过程如下浏览器页面发送请求给服务器&…

c语言实现io多路复用(select),进程,线程并发服务器

io多路复用&#xff08;select&#xff09;代码 #include<myhead.h> #include <sys/select.h> #define PORT 8888 #define IP "192.168.250.100" int main(int argc, char const *argv[]) { //创建套接字int sfd socket(AF_INET, SOCK_STREAM, 0…

小米电脑管家-非小米电脑安装教程

​​第一步&#xff1a;去浏览器搜索小米跨终端智联官网 下载小米电脑管家 如果是小米电脑&#xff0c;直接安装就行了 这里主要讲的是不是小米电脑&#xff0c;怎么去安装&#xff1f; 不是小米电脑就需要下载免检测机型插件&#xff0c;不然安装不了的 第二步&#xff1a;…

解决端口被占用问题

写文章原因: 本人在安装alist的时候,在使用5244端口的时候,显示端口被占用,于是想查看一下端口是被什么程序占用了,是否可以杀死占用的程序,还是更换端口. failed to start http: listen tcp 0.0.0.0:5244: bind: Only one usage of each socket address (protocol/network a…

幻兽帕鲁服务器搭建最简单新手教程,10秒钟自动部署,一键开服(腾讯云)

以下教程是基于腾讯云轻量应用服务器搭建的&#xff0c;非常简单&#xff0c;无论搭建幻兽帕鲁还是其他的游戏或者应用&#xff0c;都能以非常快的速度部署好。而且稳定流畅&#xff0c;功能丰富。 下面就来一起看看如何搭建吧。 幻兽帕鲁腾讯云服务器购买与一键部署教程&…

【Qt学习笔记】Qt Creator环境下 信号与槽 详解(自定义信号槽、断连、lambda表达式等)

文章目录 1. 信号槽概念1.1 信号的本质1.2 槽的本质1.3 标准信号槽1.4 信号槽 实例 2. 自定义信号槽2.1 自定义槽函数2.2 自定义信号2.3 带参 信号槽 3. 信号槽的意义 与 作用4. 信号槽断连 &#xff08;了解&#xff09;5. lamda表达式的使用5.1 基本用法5.2 捕获局部变量5.3 …

如何查看端口映射?

端口映射是一种用于实现远程访问的技术。通过将外网端口与内网设备的特定端口关联起来&#xff0c;可以使外部网络用户能够通过互联网访问内部网络中的设备和服务。在网络中使用端口映射可以解决远程连接需求&#xff0c;使用户能够远程访问设备或服务&#xff0c;无论是在同一…

python-分享篇-画樱花

文章目录 画樱花代码效果 画樱花 代码 from turtle import * from random import * from math import *def tree(n,l):pd()#下笔#阴影效果t cos(radians(heading()45))/80.25pencolor(t,t,t)pensize(n/3)forward(l)#画树枝if n>0:b random()*1510 #右分支偏转角度c ran…

Linux操作系统基础(二):Linux操作系统概述

文章目录 Linux操作系统概述 一、Linux起源 二、Linux 的含义 三、Linux发行版 Linux操作系统概述 一、Linux起源 Linux创始人——林纳斯 托瓦兹 Linux 诞生于1991年&#xff0c;作者上大学期间实现的 Linux的特点&#xff1a;开源、免费、拥有最为庞大的源码贡献者 …

MySQL数据库语句总结

一. 数据定义语言 DDL 数据定义语言&#xff0c;用来定义数据库对象的&#xff08;比如&#xff1a;数据库、表、字段等&#xff09; 1. 数据库操作 &#xff08;1&#xff09;查询所有的数据库 —— show databases; &#xff08;2&#xff09;创建数据库 —— create dat…