mirror of
https://github.com/Comfy-Org/comfy-kitchen.git
synced 2026-11-04 23:37:42 +00:00
[PR #272] Decline fp16-accumulate CUTLASS kernels on sub-sm_80 GPUs #278
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Comfy-Org/comfy-kitchen#278
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/Comfy-Org/comfy-kitchen/pull/272
Author: @potoior
Created: 10/23/2026
Status: 🔄 Open
Base:
main← Head:sm75-fp16-conv3d-capability-gate📝 Commits (2)
d57a90cAdd long key sequence tests for int8 attention8d09387Decline fp16-accumulate CUTLASS kernels on sub-sm_80 GPUs📊 Changes
4 files changed (+127 additions, -0 deletions)
View changed files
📝
comfy_kitchen/backends/cuda/__init__.py(+5 -0)📝
tests/test_fp16_conv3d.py(+39 -0)📝
tests/test_fp16_linear.py(+33 -0)📝
tests/test_int8_attention.py(+50 -0)📄 Description
Fixes #258
Problem
On sm_75 (e.g. RTX 2080 Ti), starting ComfyUI with
--fast fp16_accumulationroutes the MiniMax H3 VAE to the CUTLASS fp16-accumulate conv3d kernel, which is acutlass::arch::Sm80kernel (multistage cp.async pipelines). Launching it on sm_75 aborts the CUDA context (Xid 43 in #258).fp16_linearalready declines on sub-sm_80 via its registrymin_compute_capability=(8, 0)(added together with the kernels in #167), but the fp16_conv3d constraints entry was missing the field, and neither Python entry point checked the device itself:get_capable_backend("fp16_conv3d", kwargs)with the registry capability forced to (7, 5) still selected the CUDA backend (reproduced on main)Change
min_compute_capability=(8, 0)to the fp16_conv3d constraints entry (fp16_conv3d_outinherits it throughwith_out_param)supportedchecks offp16_linearand_cutlass_fp16_conv3d, the same double-guard pattern sol_attn uses — callers that bypass the registry now fall back to torch instead of abortingSub-sm_80 devices now route to the eager backend (plain
torch.conv3d/ cuBLAS), the documented fallback requested in #258.Tests
Added
TestSm75CapabilityGatetotests/test_fp16_conv3d.pyandtests/test_fp16_linear.py:ck.fp16_conv3dreturns torch's conv bit-exact, and the direct entries declineVerified on an NVIDIA Thor (sm_110, torch 2.11.0+cu130): the 7 new tests pass and the full
test_fp16_conv3d.py/test_fp16_linear.py/test_constraints.pysuites still pass (101 passed). One failure intest_gemm_bias_contract.pyreproduces identically on clean main on this architecture and is unrelated to this change.No SM75 hardware was available; the fix is verified at the routing layer (capability-mocked), plus the kernels being sm_80-only by construction (cp.async multistage pipelines).
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.