AttributeError(AttributeError: ‘DynamicCache‘ object has no attribute ‘get_max_length‘. Did you mean

故障现象:

新装系统运行comfyui时出现提示:
!!! Exception during processing !!! 'DynamicCache' object has no attribute 'get_max_length'
Traceback (most recent call last):
  File "/home/chawk/ComfyUI/execution.py", line 327, in execute
    output_data, output_ui, has_subgraph = get_output_data(obj, input_data_all, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb)
  File "/home/chawk/ComfyUI/execution.py", line 202, in get_output_data
    return_values = _map_node_over_list(obj, input_data_all, obj.FUNCTION, allow_interrupt=True, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb)
  File "/home/chawk/ComfyUI/execution.py", line 174, in _map_node_over_list
    process_inputs(input_dict, i)
  File "/home/chawk/ComfyUI/execution.py", line 163, in process_inputs
    results.append(getattr(obj, func)(**inputs))
  File "/home/chawk/ComfyUI/custom_nodes/ComfyUI_LayerStyle_Advance/py/phi_nodes.py", line 124, in phi_prompt
    generate_ids = phi_model.model.generate(
  File "/home/chawk/miniconda3/envs/comfyui/lib/python3.10/site-packages/torch/utils/_contextlib.py", line 116, in decorate_context
    return func(*args, **kwargs)
  File "/home/chawk/miniconda3/envs/comfyui/lib/python3.10/site-packages/transformers/generation/utils.py", line 2223, in generate
    result = self._sample(
  File "/home/chawk/miniconda3/envs/comfyui/lib/python3.10/site-packages/transformers/generation/utils.py", line 3204, in _sample
    model_inputs = self.prepare_inputs_for_generation(input_ids, **model_kwargs)
  File "/home/chawk/.cache/huggingface/modules/transformers_modules/Phi-3.5-vision-instruct/modeling_phi3_v.py", line 1661, in prepare_inputs_for_generation
    max_cache_length = past_key_values.get_max_length()
  File "/home/chawk/miniconda3/envs/comfyui/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1928, in __getattr__
    raise AttributeError(
AttributeError: 'DynamicCache' object has no attribute 'get_max_length'. Did you mean: 'get_seq_length'?

定位过程:

将module.py文件中1928做相应的修改,故障依旧,同时该文件的相应位置又恢复为get_max_length,

经分析,应该是DynamicCache引发的,定位DynamicCache在transformers中的定义

解决方案:

查看transformers版本为最新版本4.49.0

属于transformers版本过新,产生的不兼容

将其版本降为4.48.0,故障消失

### 解决 Python 中 'DynamicCache' 对象没有属性 'get_max_length' 的 AttributeError 错误 当遇到 `'DynamicCache' object has no attribute 'get_max_length'` 这样的 `AttributeError` 时,通常意味着尝试访问的对象实例并没有定义该方法或属性。这可能是由于多种原因造成的: #### 可能的原因分析 1. **类定义不匹配** 如果使用的库版本更新过,某些旧的方法可能已经被移除或者重命名。确认当前所依赖的库版本与代码中的调用相兼容是非常重要的。 2. **拼写错误** 方法名可能存在大小写敏感或其他字符上的差异,仔细检查是否存在此类问题[^3]。 3. **初始化未完成** 确认 `DynamicCache` 实例化过程中是否正确执行了所有必要的初始化操作,确保对象处于预期状态再进行后续的操作。 4. **自定义实现缺失** 若是在继承原有类的基础上进行了扩展,则需验证新创建的子类确实实现了所需的接口成员。 #### 解决方案建议 为了修复这个特定的异常,可以采取以下几个措施之一来解决问题: - **查阅官方文档** 查看有关 `DynamicCache` 类的具体说明文档,了解其支持哪些公共 API 接口以及如何正确使用它们。 - **调试并打印可用属性** 使用内置函数如 `dir()` 或者通过 IDE 工具查看实际存在的属性列表,帮助定位是否有其他替代名称可用于获取最大长度信息。 ```python dynamic_cache_instance = DynamicCache() print(dir(dynamic_cache_instance)) ``` - **源码审查** 打开对应的模块文件,直接查找 `class DynamicCache:` 下面的内容,寻找是否存在名为 `get_max_length` 的成员声明;如果不存在则考虑向开发者反馈此情况或是寻求社区的帮助找到合适的解决方案。 - **降级或升级包版本** 尝试安装不同版本的软件包,有时候回归到之前稳定版能够解决因API变更带来的兼容性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值