运行时错误:StableCascadeCombinedPipeline:期望所有张量位于同一设备上

问题描述 投票:0回答:1

简而言之:尝试将图像传递到StableCascadeCombinedPipeline会出现运行时错误,抱怨张量并非全部在cuda中。如果我注释掉图像参数,以便它仅依赖于文本提示,即作为文本到图像生成器,则该应用程序可以完美运行。

可以看到应用程序代码的要点(60 行 Python 代码),其中注释掉了图像输入 here

管道的文档将可选图像参数定义为:

images (torch.Tensor, PIL.Image.Image, List[torch.Tensor], List[PIL.Image.Image], optional) — The images to guide the image generation for the prior.
我正在通过渐变图像组件传递 PIL.Image.Image。

由于应用程序运行时不传递图像,似乎我需要以某种方式确保图像最终出现在

cuda
中,但到目前为止我还没有找到任何有关如何执行此操作的说明。

这是设置管道并定义生成函数的代码部分:

# Constants
repo = "stabilityai/stable-cascade"


# Ensure model and scheduler are initialized in GPU-enabled function
if torch.cuda.is_available():
    pipe = StableCascadeCombinedPipeline.from_pretrained(repo, variant="bf16", torch_dtype=torch.bfloat16)
    pipe.to("cuda")

# The generate function
@spaces.GPU(enable_queue=True)
def generate_image(prompt):  
#def generate_image(prompt, images):  
    seed  =  random.randint(-100000,100000)

    results =  pipe(
                prompt=prompt,
                #images=[images],
                height=1024,
                width=1024,
                num_inference_steps=20, 
                generator=torch.Generator(device="cuda").manual_seed(seed)
            )
    return results.images[0]
huggingface diffusers
1个回答
0
投票

问题原来是

pipe.to('cuda')
没有将所需的组件(之前的图像编码器)移动到cuda。问题解决了 添加:

pipe.prior_image_encoder.to('cuda')

完整、有效的

app.py
requirements.txt
发布于 https://github.com/huggingface/diffusers/issues/7598#issuecomment-2042897916

© www.soinside.com 2019 - 2024. All rights reserved.