我正在try 在我的Mac M1中使用Pytorch的漫射器来生成图片.我有一个简单的语法,如下所示:

modelid = "CompVis/stable-diffusion-v1-4"
device = "cuda"
pipe = StableDiffusionPipeline.from_pretrained(modelid, revision="fp16", torch_dtype=torch.float16, use_auth_token=auth_token) 
pipe.to(device) 

当我运行我的脚本时,它抛出一个错误,

(meta_ai) ➜  Difussion_Model /Users/urs/miniforge3/envs/meta_ai/bin/python "/Users/urs/Downloads/Difussion_Model/03_StableD
iffusionApp/app trial1.py"
Fetching 19 files: 100%|██████████████████████████████████████████████████████████████████████████████████| 

19/19 [00:00<00:00, 10253.70it/s]
Traceback (most recent call last):
  File "/Users/urs/Downloads/Difussion_Model/03_StableDiffusionApp/app trial1.py", line 27, in <module>
    pipe = StableDiffusionPipeline.from_pretrained(modelid, revision="fp16", torch_dtype=torch.float16, use_auth_token=auth_token) 
  File "/Users/urs/miniforge3/envs/meta_ai/lib/python3.9/site-packages/diffusers/pipeline_utils.py", line 239, in from_pretrained
    load_method = getattr(class_obj, load_method_name)
TypeError: getattr(): attribute name must be string

在torch_dtype=torch.flat16中,我try 了这里提供的所有不同类型: https://pytorch.org/docs/stable/tensor_attributes.html个,但都不管用.

有谁能帮帮忙吗?

Updates on 6 Dec: 我复制并粘贴了专门用于M1的官方页面上的代码. https://huggingface.co/docs/diffusers/optimization/mps个 代码如下所示,

# make sure you're logged in with `huggingface-cli login`
from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
pipe = pipe.to("mps")

# Recommended if your computer has < 64 GB of RAM
pipe.enable_attention_slicing()

prompt = "a photo of an astronaut riding a horse on mars"

# First-time "warmup" pass (see explanation above)
_ = pipe(prompt, num_inference_steps=1)

# Results match those from the CPU device after the warmup pass.
image = pipe(prompt).images[0]

但我仍然收到相同的错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[14], line 4
      1 # make sure you're logged in with `huggingface-cli login`
      2 from diffusers import StableDiffusionPipeline
----> 4 pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
      5 pipe = pipe.to("mps")
      7 # Recommended if your computer has < 64 GB of RAM

File ~/miniforge3/envs/meta_ai/lib/python3.9/site-packages/diffusers/pipeline_utils.py:239, in DiffusionPipeline.from_pretrained(cls, pretrained_model_name_or_path, **kwargs)
    236     if issubclass(class_obj, class_candidate):
    237         load_method_name = importable_classes[class_name][1]
--> 239 load_method = getattr(class_obj, load_method_name)
    241 loading_kwargs = {}
    242 if issubclass(class_obj, torch.nn.Module):

TypeError: getattr(): attribute name must be string

推荐答案

设备应为mps(设备='mps').Mac M1没有内置NVIDIA图形处理器.

另外,我建议你go 看看How to use Stable Diffusion in Apple Silicon (M1/M2) HG的博客,确保所有的要求都得到了满足.

另外,判断您安装的扩散器版本.

import diffusers
print(diffusers.__version__)

如果是<=0.4.0,请使用更新,

pip install --upgrade diffusers transformers scipy

Python相关问答推荐

如何让剧作家等待Python中出现特定cookie(然后返回它)?

发生异常:TclMessage命令名称无效.!listbox"

NP.round解算数据后NP.unique

我如何根据前一个连续数字改变一串数字?

连接一个rabrame和另一个1d rabrame不是问题,但当使用[...]'运算符会产生不同的结果

根据列值添加时区

从嵌套的yaml创建一个嵌套字符串,后面跟着点

合并帧,但不按合并键排序

dask无groupby(ddf. agg([min,max])?''''

使用Python从rotowire中抓取MLB每日阵容

如何使用使用来自其他列的值的公式更新一个rabrame列?

OpenCV轮廓.很难找到给定图像的所需轮廓

30个非DATETIME天内的累计金额

如何获得3D点的平移和旋转,给定的点已经旋转?

如何获得满足掩码条件的第一行的索引?

Polars表达式无法访问中间列创建表达式

具有不同坐标的tkinter canvs.cocords()和canvs.moveto()

大Pandas 中的群体交叉融合

迭代工具组合不会输出大于3的序列

根据边界点的属性将图划分为子图