siliconflow / onediff

OneDiff: An out-of-the-box acceleration library for diffusion models.
https://github.com/siliconflow/onediff/wiki
Apache License 2.0
1.58k stars 97 forks source link

Exception with IPAdapter in ComfyUI: unexpected keyword argument 'cond_alt' #812

Closed FennelFetish closed 2 months ago

FennelFetish commented 5 months ago

Describe the bug

Exception when executing workflow in ComfyUI with OneDiff and IPAdapter. Happens with all the nodes: IPAdapter FaceID, IPAdapter Advanced, IPAdapter/IPAdapter Unified Loader... IPAdapter does work without OneDiff.

Your environment

ComfyUI_IPAdapter_plus commit b257aecbedeb0c1367c6f67671afdeadd6e81fef (2024-04-13)

Kubuntu 22.04 LTS AMD Ryzen 9 5950X 16-Core Processor NVIDIA GeForce RTX 4090

OneDiff git commit id

d7e448773f7d666fc3ad865c46d448532614e8df (2024-04-12)

OneFlow version info

path: ['/mnt/firlefanz/StableDiffusion/ComfyUI/venv/lib/python3.10/site-packages/oneflow']
version: 0.9.1.dev20240411+cu121
git_commit: 931ca52
cmake_build_type: Release
rdma: True
mlir: True
enterprise: False

How To Reproduce

Import ComfyUI workflow from this image here: https://github.com/siliconflow/onediff/pull/732

The complete error message

Don't know if this line is part of the error: Failed to update obj_entity in place. Exception: Not support <function CondFunc.__new__.<locals>.<lambda> at 0x7f07a456f010> with parameters Module: <module 'onediff_comfy_nodes.modules.sd_hijack_utils' from '/mnt/firlefanz/StableDiffusion/ComfyUI/custom_nodes/onediff_comfy_nodes/modules/sd_hijack_utils.py'>

!!! Exception during processing !!!
Traceback (most recent call last):
  File "/mnt/firlefanz/StableDiffusion/ComfyUI/execution.py", line 151, in recursive_execute
    output_data, output_ui = get_output_data(obj, input_data_all)
  File "/mnt/firlefanz/StableDiffusion/ComfyUI/execution.py", line 81, in get_output_data
    return_values = map_node_over_list(obj, input_data_all, obj.FUNCTION, allow_interrupt=True)
  File "/mnt/firlefanz/StableDiffusion/ComfyUI/execution.py", line 74, in map_node_over_list
    results.append(getattr(obj, func)(**slice_dict(input_data_all, i)))
  File "/mnt/firlefanz/StableDiffusion/ComfyUI/custom_nodes/ComfyUI_IPAdapter_plus/IPAdapterPlus.py", line 673, in apply_ipadapter
    return (ipadapter_execute(model.clone(), ipadapter_model, clip_vision, **ipa_args), )
  File "/mnt/firlefanz/StableDiffusion/ComfyUI/custom_nodes/ComfyUI_IPAdapter_plus/IPAdapterPlus.py", line 373, in ipadapter_execute
    set_model_patch_replace(model, patch_kwargs, ("input", id))
  File "/mnt/firlefanz/StableDiffusion/ComfyUI/custom_nodes/onediff_comfy_nodes/modules/sd_hijack_utils.py", line 41, in <lambda>
    lambda *args, **kwargs: self(*args, **kwargs),
  File "/mnt/firlefanz/StableDiffusion/ComfyUI/custom_nodes/onediff_comfy_nodes/modules/sd_hijack_utils.py", line 57, in __call__
    return self.__sub_func(self.__orig_func, *args, **kwargs)
  File "/mnt/firlefanz/StableDiffusion/ComfyUI/custom_nodes/onediff_comfy_nodes/modules/oneflow/hijack_ipadapter_plus/IPAdapterPlus.py", line 38, in set_model_patch_replace_fn_of
    patch = CrossAttentionPatch_OF(**patch_kwargs)
TypeError: CrossAttentionPatch.__init__() got an unexpected keyword argument 'cond_alt'

Additional context

Thank you for your work on OneDiff

ccssu commented 4 months ago

an unexpected keyword argument 'cond_alt'

CrossAttentionPatch.init() got an unexpected keyword argument 'cond_alt' This error is due to a modification made to the CrossAttentionPatch of the plugin, specifically in:https://github.com/cubiq/ComfyUI_IPAdapter_plus/blob/0d0a7b3693baf8903fe2028ff218b557d619a93d/CrossAttentionPatch.py#L9

solve

@FennelFetish This has been addressed in pull request https://github.com/siliconflow/onediff/pull/814 and is currently being progressed for merging. You can try it out using https://github.com/siliconflow/onediff/pull/814

 ## Install
### 1. onediff 
git clone https://github.com/siliconflow/onediff.git
cd onediff 
git checkout -b dev_ipa+isntantid
pip install -e .

### 2. onediff_comfy_nodes
cp -r onediff_comfy_nodes path/to/ComfyUI/custom_nodes/