[GH-ISSUE #123] [HIP backend]Slow performance on Linux AMD. #38

Closed
opened 2026-10-26 22:19:33 +00:00 by bsakaguchi · 3 comments
Owner

Originally created by @jnolck on GitHub (Aug 18, 2026).
Original GitHub issue: https://github.com/Comfy-Org/comfy-kitchen/issues/123

I don't think it's intended to work this way but on a gfx1100 on the hip backend on Linux the eager backend is always taken.

With a w4a8 model.

[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend hip selected for apply_rope
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend hip selected for apply_rope
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend hip selected for apply_rope
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend hip selected for apply_rope
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend hip selected for apply_rope
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend eager selected for w4a8_int8_linear
[DEBUG] Backend hip selected for apply_rope```

w4a4 model. 

[DEBUG] Backend eager selected for convrot_w4a4_linear
[DEBUG] Backend eager selected for convrot_w4a4_linear
[DEBUG] Backend eager selected for convrot_w4a4_linear
[DEBUG] Backend hip selected for apply_rope
[DEBUG] Backend eager selected for convrot_w4a4_linear
[DEBUG] Backend eager selected for convrot_w4a4_linear
[DEBUG] Backend eager selected for convrot_w4a4_linear
[DEBUG] Backend eager selected for convrot_w4a4_linear
[DEBUG] Backend eager selected for convrot_w4a4_linear
[DEBUG] Backend eager selected for convrot_w4a4_linear
[DEBUG] Backend eager selected for convrot_w4a4_linear

Int8 These are all krea models. 

[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend hip selected for apply_rope
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend hip selected for apply_rope
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend hip selected for apply_rope
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
[DEBUG] Backend eager selected for int8_linear
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:24<00:00,  3.05s/it]

Is there an env variable I'm missing for that sweet hand crafted wmma code to run on my card? Is it a bug? Is it intended? 
Originally created by @jnolck on GitHub (Aug 18, 2026). Original GitHub issue: https://github.com/Comfy-Org/comfy-kitchen/issues/123 I don't think it's intended to work this way but on a gfx1100 on the hip backend on Linux the eager backend is always taken. With a w4a8 model. ```[DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend hip selected for apply_rope [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend hip selected for apply_rope [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend hip selected for apply_rope [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend hip selected for apply_rope [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend hip selected for apply_rope [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend eager selected for w4a8_int8_linear [DEBUG] Backend hip selected for apply_rope``` w4a4 model. [DEBUG] Backend eager selected for convrot_w4a4_linear [DEBUG] Backend eager selected for convrot_w4a4_linear [DEBUG] Backend eager selected for convrot_w4a4_linear [DEBUG] Backend hip selected for apply_rope [DEBUG] Backend eager selected for convrot_w4a4_linear [DEBUG] Backend eager selected for convrot_w4a4_linear [DEBUG] Backend eager selected for convrot_w4a4_linear [DEBUG] Backend eager selected for convrot_w4a4_linear [DEBUG] Backend eager selected for convrot_w4a4_linear [DEBUG] Backend eager selected for convrot_w4a4_linear [DEBUG] Backend eager selected for convrot_w4a4_linear Int8 These are all krea models. [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend hip selected for apply_rope [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend hip selected for apply_rope [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend hip selected for apply_rope [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear [DEBUG] Backend eager selected for int8_linear 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:24<00:00, 3.05s/it] Is there an env variable I'm missing for that sweet hand crafted wmma code to run on my card? Is it a bug? Is it intended?
Author
Owner

@jnolck commented on GitHub (Aug 18, 2026):

comfy-aimdo                                0.4.13
comfy-angle                                0.1.0
comfy-kitchen                              0.2.31
comfy-quants                               0.1.0
comfyui-embedded-docs                      0.5.10
rich                                       14.0.0
rocm                                       7.15.0a20260728
rocm-bootstrap                             0.1.0
rocm-profiler                              7.15.0a20260728
rocm-sdk-core                              7.15.0a20260728
rocm-sdk-devel                             7.15.0a20260728
rocm-sdk-device-gfx1100                    7.15.0a20260728
rocm-sdk-libraries                         7.15.0a20260728
rocm-sdk-libraries-gfx110x-all             7.13.0a20260423
rotary-embedding-torch                     0.9.1
rpds-py                                    2026.5.1
torch                                      2.13.0+rocm7.15.0a20260728
torchaudio                                 2.11.0.2+rocm7.15.0a20260728
torchdiffeq                                0.2.5
torchsde                                   0.2.6
torchvision                                0.28.0+rocm7.15.0a20260728
tqdm                                       4.67.1
trailrunner                                1.4.0
traitlets                                  5.15.1
trampoline                                 0.1.2
transformers                               5.13.0
trimesh                                    4.10.1
triton                                     3.8.0+git4cff872c.rocm7.15.0a20260728
triton-kernels                             1.0.0+amd.rocm7.0.0.gitd0d77a509
<!-- gh-comment-id:5329278941 --> @jnolck commented on GitHub (Aug 18, 2026): ``` comfy-aimdo 0.4.13 comfy-angle 0.1.0 comfy-kitchen 0.2.31 comfy-quants 0.1.0 comfyui-embedded-docs 0.5.10 rich 14.0.0 rocm 7.15.0a20260728 rocm-bootstrap 0.1.0 rocm-profiler 7.15.0a20260728 rocm-sdk-core 7.15.0a20260728 rocm-sdk-devel 7.15.0a20260728 rocm-sdk-device-gfx1100 7.15.0a20260728 rocm-sdk-libraries 7.15.0a20260728 rocm-sdk-libraries-gfx110x-all 7.13.0a20260423 rotary-embedding-torch 0.9.1 rpds-py 2026.5.1 torch 2.13.0+rocm7.15.0a20260728 torchaudio 2.11.0.2+rocm7.15.0a20260728 torchdiffeq 0.2.5 torchsde 0.2.6 torchvision 0.28.0+rocm7.15.0a20260728 tqdm 4.67.1 trailrunner 1.4.0 traitlets 5.15.1 trampoline 0.1.2 transformers 5.13.0 trimesh 4.10.1 triton 3.8.0+git4cff872c.rocm7.15.0a20260728 triton-kernels 1.0.0+amd.rocm7.0.0.gitd0d77a509 ```
Author
Owner

@0xDELUXA commented on GitHub (Aug 18, 2026):

Try running:

import comfy_kitchen as ck
from comfy_kitchen.backends import hip
print("arches   :", hip._visible_gfx_arches())
print("available:", hip.is_available(), "| has_wmma:", hip.has_wmma())
caps = ck.list_backends()["hip"]["capabilities"]
for op in ("int8_linear", "w4a8_int8_linear", "convrot_w4a4_linear", "apply_rope"):
     print(f"  {op:22} advertised by hip: {op in caps}")

If arches shows more than one entry and has_wmma is False, hiding the non-WMMA device restores the kernels:

HIP_VISIBLE_DEVICES=0 python main.py

If instead it shows a single gfx1100 with has_wmma: True, then the ops are advertised and something is rejecting the individual calls, which is a different bug - in that case ck.registry.validate_backend_for_call("hip", "int8_linear", kwargs) returns the failing parameter and reason.

<!-- gh-comment-id:5329740088 --> @0xDELUXA commented on GitHub (Aug 18, 2026): Try running: ```python import comfy_kitchen as ck from comfy_kitchen.backends import hip print("arches :", hip._visible_gfx_arches()) print("available:", hip.is_available(), "| has_wmma:", hip.has_wmma()) caps = ck.list_backends()["hip"]["capabilities"] for op in ("int8_linear", "w4a8_int8_linear", "convrot_w4a4_linear", "apply_rope"): print(f" {op:22} advertised by hip: {op in caps}") ``` If arches shows more than one entry and `has_wmma` is False, hiding the non-WMMA device restores the kernels: `HIP_VISIBLE_DEVICES=0 python main.py` If instead it shows a single gfx1100 with `has_wmma: True`, then the ops are advertised and something is rejecting the individual calls, which is a different bug - in that case `ck.registry.validate_backend_for_call("hip", "int8_linear", kwargs)` returns the failing parameter and reason.
Author
Owner

@jnolck commented on GitHub (Aug 19, 2026):

arches : ('gfx1100', 'gfx1036')
available: True | has_wmma: False
int8_linear advertised by hip: False
w4a8_int8_linear advertised by hip: False
convrot_w4a4_linear advertised by hip: False
apply_rope advertised by hip: True

Yup, that was it. starting with HIP_VISIBLE_DEVICES=0 solved the issue. Damn It's fast!!!

<!-- gh-comment-id:5346966883 --> @jnolck commented on GitHub (Aug 19, 2026): arches : ('gfx1100', 'gfx1036') available: True | has_wmma: False int8_linear advertised by hip: False w4a8_int8_linear advertised by hip: False convrot_w4a4_linear advertised by hip: False apply_rope advertised by hip: True Yup, that was it. starting with HIP_VISIBLE_DEVICES=0 solved the issue. Damn It's fast!!!
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Comfy-Org/comfy-kitchen#38
No description provided.