You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac M1上用PyTorch Diffusers遇getattr类型错误如何解决?

解决Mac M1上Diffusers调用StableDiffusionPipeline的TypeError问题

问题分析

你遇到的TypeError: getattr(): attribute name must be string错误,根源是diffusers版本兼容性问题,或是依赖包不匹配、模型缓存损坏导致的加载异常,和torch_dtype无关。

解决方案

  • 升级核心依赖包
    执行以下命令升级diffusers及相关依赖到最新稳定版,修复旧版本的兼容性bug:

    pip install --upgrade diffusers transformers accelerate
    
  • 验证PyTorch的M1适配性
    确保使用的是适配M1 arm64架构的PyTorch版本,运行以下代码检查MPS后端是否可用:

    import torch
    print(torch.backends.mps.is_available())
    

    输出True即为正常状态。

  • 清理模型缓存
    删除本地HuggingFace缓存目录(默认路径:~/.cache/huggingface/hub),避免损坏的缓存文件导致加载失败,之后重新运行代码。

  • 重新确认HuggingFace登录状态
    执行huggingface-cli login命令重新登录,确保你的token有效且有权限访问目标模型。


问题重现

在Mac M1设备上尝试用Diffusers生成图片,最初代码:

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_StableDiffusionApp/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无效,后使用HuggingFace官方M1适配代码:

# 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

内容的提问来源于stack exchange,提问作者yts61

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:50:28