Skip to main content

Comfy Kitchen

Fast kernel library for Diffusion inference with multiple compute backends.

Backend Capabilities Matrix

Function eager cuda triton hip
quantize_per_tensor_fp8
dequantize_per_tensor_fp8
stochastic_rounding_fp8
quantize_nvfp4
dequantize_nvfp4
scaled_mm_nvfp4
quantize_mxfp8
dequantize_mxfp8
scaled_mm_mxfp8
adaln
rms_adaln
apply_rope
apply_rope1
apply_rope_split_half
apply_rope_split_half1
rms_rope
rms_rope1
rms_rope_split_half
rms_rope_split_half1
quantize_int8_rowwise
quantize_int8_tensorwise
quantize_and_rotate_rowwise
quantize_int8_convrot_weight
dequantize_int8_simple_dtype
dequantize_int8_convrot_weight_dtype
int8_linear
gemv_awq_w4a16
quantize_svdquant_w4a4
scaled_mm_svdquant_w4a4
convrot_w4a4_linear
quantize_convrot_w4a4_weight
dequantize_convrot_w4a4_weight

Each of the eight rope entries also has an in-place form (apply_rope_, rms_rope_split_half1_, ...) with the same backend coverage as the row above.

HIP backend (AMD RDNA2 / RDNA3 / RDNA3.5 / RDNA4)

The hip backend implements the quantized paths with its own kernels: WMMA matrix-core GEMMs on RDNA3/RDNA3.5/RDNA4, and non-WMMA kernels (quantizers, INT8 dequantizers, RoPE and the fused RMSNorm+RoPE, AdaLN and RMS-AdaLN, the AWQ GEMV) that also run on RDNA2. It does not link or call hipBLAS/hipBLASLt; every matmul is compiled from the sources in comfy_kitchen/backends/hip/.

Both rope kernels address their inputs through the tensor's own strides, so a q/k pair permuted or sliced out of a packed qkv is read where it lies rather than copied contiguous first. The in-place entries (apply_rope_, rms_rope_ and their split-half and single-tensor siblings) rotate a strided view in place for the same reason: each thread owns one element pair and loads both before storing either.

int8_linear(input_act=...) folds the activation into the fused ConvRot quantizer's load, so an MLP's linear(act(proj(x))) never writes act's output to HBM just to read it straight back.

What a GPU gets depends on whether it has matrix cores:

Generation gfx targets Matrix cores What runs
RDNA4 gfx1200, gfx1201 WMMA + fp8 All HIP-supported kernels, fp8 native
RDNA3.5 gfx1150-gfx1153 WMMA, no fp8 All HIP-supported kernels; fp8 widened
RDNA3 gfx1100-gfx1103 WMMA, no fp8 All HIP-supported kernels; fp8 widened
RDNA2 gfx1030-gfx1036 none Non-WMMA kernels incl. AWQ GEMV; WMMA GEMMs decline

fp8, int8 and int4 share one byte-addressed tile kernel (gemm_wmma.h). RDNA3 and RDNA4 spread a WMMA operand across the wave differently and RDNA3 has no fp8 WMMA (it widens to bf16, which is exact), so each has its own set of Mma policies in mma.h; the tile kernel itself is shared.

RDNA2 has no matrix cores. It runs the kernels that do not need them (RoPE, AdaLN and RMS-AdaLN, the quantizers, stochastic rounding, the AWQ GEMV) and does not advertise the GEMMs, which fall through to triton/eager. In a process with a mix of GPUs the capability set is the intersection, since kernels launch on the tensor's own device.

A request outside a kernel's domain (swizzled operands, scaling other than tensor-wise, a K that is not a multiple of 16) falls back to torch or eager. NVFP4 and MXFP8 stay on eager everywhere: RDNA has neither fp4 WMMA nor microscaling hardware. Set COMFY_KITCHEN_DISABLE_HIP=1 to remove the backend from dispatch.

Building

On a ROCm-only host, the backend is selected automatically when CUDA's nvcc is absent. Both a system ROCm install and the pip rocm-sdk layout (which a ROCm PyTorch build already pulls in) are detected, so on Linux and Windows alike the usual build is:

pip install .

No environment variables, CC/CXX override or Visual Studio developer shell are needed: the ROCm clang builds C, C++ and HIP alike and locates the MSVC toolchain itself. CMake >= 3.26 and Ninja are required (Windows only ships a Visual Studio generator, which has no HIP language support). On Windows the Microsoft C++ build tools and Windows SDK must be installed, since clang links against them and CMake compiles a resource file with the SDK's rc.exe, which the build locates itself rather than expecting on PATH. Use the Visual Studio 2022 v143 toolset; newer MSVC toolsets are not yet reliable with ROCm.

When CUDA and ROCm toolchains are both installed, the source build defaults to CUDA only. This avoids compiling an unused multi-architecture HIP binary on an NVIDIA workstation. Request a combined build explicitly:

COMFY_KITCHEN_BUILD_HIP=1 pip install .

Architectures default to the validated GPUs the build machine can see, or to every target in the backend's architecture manifest when it can see none (a CI box), which is what the wheels carry. Detection reads the visible devices through PyTorch, so under PEP 517 build isolation (a plain pip install .) it sees nothing and falls back to the full target list; set COMFY_HIP_ARCHS, or pass --no-build-isolation, to build for the local GPU instead. Building for one target is much faster:

COMFY_HIP_ARCHS=gfx1201 pip install .
$env:COMFY_HIP_ARCHS = "gfx1201"; pip install .

PYTORCH_ROCM_ARCH and GPU_ARCHS are honoured too. When the build machine sees AMD GPUs but none is RDNA2/3/3.5/4 (CDNA has MFMA, not WMMA), the extension is skipped rather than built (seeing no GPU at all falls back to the full target list above instead); COMFY_KITCHEN_BUILD_HIP=1 requests HIP explicitly (and makes an unsupported visible AMD GPU a hard error), while COMFY_KITCHEN_BUILD_NO_HIP=1 suppresses the backend entirely.

Architecture overrides are exact and fail closed. A compiler-recognized target that is not in the manifest is rejected until its device and WMMA policies have been reviewed and added.

Both extensions are built against the Python limited API on 3.12+, so a wheel carrying CUDA and HIP side by side keeps its abi3 tag. At runtime only the extension matching PyTorch's CUDA or ROCm runtime is loaded.

Quantized Tensors

The library provides QuantizedTensor, a torch.Tensor subclass that transparently intercepts PyTorch operations and dispatches them to optimized quantized kernels when available.

Layout Format HW Requirement Description
TensorCoreFP8Layout FP8 E4M3 SM ≥ 8.9 (Ada) Per-tensor scaling, 1:1 element mapping
TensorCoreNVFP4Layout NVFP4 E2M1 SM ≥ 10.0 (Blackwell) Block quantization with 16-element blocks
TensorCoreMXFP8Layout MXFP8 E4M3 SM ≥ 10.0 (Blackwell) Block quantization with 32-element blocks, E8M0 scales
from comfy_kitchen.tensor import QuantizedTensor, TensorCoreFP8Layout, TensorCoreNVFP4Layout

# Quantize a tensor
x = torch.randn(128, 256, device="cuda", dtype=torch.bfloat16)
qt = QuantizedTensor.from_float(x, TensorCoreFP8Layout)

# Operations dispatch to optimized kernels automatically
output = torch.nn.functional.linear(qt, weight_qt)

# Dequantize back to float
dq = qt.dequantize()

Installation

From PyPI

# Install default (Linux/Windows/MacOS)
pip install comfy-kitchen

# Install with CUBLAS for NVFP4 (+Blackwell)
pip install comfy-kitchen[cublas]

Package Variants

  • CUDA wheels: Linux x86_64 and Windows x64
  • Pure Python wheel: Any platform, eager and triton backends only

Wheels are built for Python 3.10, 3.11, and 3.12+ (using Stable ABI for 3.12+).

From Source

# Standard installation with CUDA support
pip install .

# Development installation
pip install -e ".[dev]"

# For faster rebuilds during development (skip build isolation)
pip install -e . --no-build-isolation -v

Build Options

These options require using setup.py directly (not pip install):

Option Command Description Default
--no-cuda python setup.py bdist_wheel --no-cuda Disable CUDA; without --hip, build a CPU-only wheel Enabled (build with CUDA)
--hip python setup.py bdist_wheel --hip Add HIP explicitly (including to a CUDA build) Auto only when CUDA is unavailable
--no-hip python setup.py bdist_wheel --no-hip Disable HIP Disabled
--hip-archs=... python setup.py build_ext --hip-archs="gfx1200;gfx1201" HIP architectures to build for Visible supported AMD GPUs, otherwise all supported targets
--cuda-archs=... python setup.py build_ext --cuda-archs="80;89" CUDA architectures to build for 75-virtual;80;89;90a;100f;120f (Linux), 75-virtual;80;89;120f (Windows)
--debug-build python setup.py build_ext --debug-build Build in debug mode with symbols Disabled (Release)
--lineinfo python setup.py build_ext --lineinfo Enable NVCC line info for profiling Disabled
# Build CPU-only wheel (pure Python, no CUDA required)
python setup.py bdist_wheel --no-cuda

# Build with custom CUDA architectures
python setup.py build_ext --cuda-archs="80;89" bdist_wheel

# Debug build with line info for profiling
python setup.py build_ext --debug-build --lineinfo bdist_wheel

Requirements

  • Python: ≥3.10
  • PyTorch: ≥2.5.0
  • CUDA Runtime (for CUDA wheels): ≥13.0
    • Pre-built wheels require NVIDIA Driver r580+
    • Building from source requires CUDA Toolkit ≥12.8 and CUDA_HOME environment variable
  • nanobind: ≥2.0.0 (for building from source)
  • CMake: ≥3.26 (for building from source; the abi3 modules need FindPython's Development.SABIModule)

Quick Start

import comfy_kitchen as ck
import torch

# Automatic backend selection (hip -> cuda -> triton -> eager)
x = torch.randn(100, 100, device="cuda")
scale = torch.tensor([1.0], device="cuda")
result = ck.quantize_per_tensor_fp8(x, scale)

# Check which backends are available
print(ck.list_backends())

# Force a specific backend
result = ck.quantize_per_tensor_fp8(x, scale, backend="eager")

# Temporarily use a different backend
with ck.use_backend("triton"):
    result = ck.quantize_per_tensor_fp8(x, scale)

Backend System

The library supports multiple backends:

  • eager: Pure PyTorch implementation
  • cuda: Custom CUDA C kernels (CUDA only)
  • hip: Custom HIP kernels (WMMA GEMMs on RDNA3/3.5/4; non-WMMA kernels also on RDNA2)
  • triton: Triton JIT-compiled kernels

Automatic Backend Selection

When you call a function, the registry selects the best backend by checking constraints in priority order (hipcudatritoneager):

# Backend is selected automatically based on input constraints
result = ck.quantize_per_tensor_fp8(x, scale)

# On CPU tensors → falls back to eager (only backend supporting CPU)
# On CUDA tensors → uses cuda or triton (higher priority)

Constraint System

Each backend declares constraints for its functions:

Constraint Description
Device Which device types are supported
Dtype Allowed input/output dtypes per parameter
Shape Shape requirements (e.g., 2D tensors, dimensions divisible by 16)
Compute Capability Minimum GPU architecture (e.g., SM 8.0 for FP8, SM 10.0 for NVFP4)

The registry validates inputs against these constraints before calling the backend—no try/except fallback patterns. If no backend can handle the inputs, a NoCapableBackendError is raised with details.

# Debug logging to see backend selection
import logging
logging.getLogger("comfy_kitchen.dispatch").setLevel(logging.DEBUG)

Testing

Run the test suite with pytest:

# Run all tests
pytest

# Run specific test file
pytest tests/test_backends.py

# Run with verbose output
pytest -v

# Run specific test
pytest tests/test_backends.py::TestBackendSystem::test_list_backends

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

comfy_kitchen-0.2.27-py3-none-any.whl (161.6 kB view details)

Uploaded Python 3

comfy_kitchen-0.2.27-cp312-abi3-win_arm64.whl (5.6 MB view details)

Uploaded CPython 3.12+Windows ARM64

comfy_kitchen-0.2.27-cp312-abi3-win_amd64.whl (32.9 MB view details)

Uploaded CPython 3.12+Windows x86-64

comfy_kitchen-0.2.27-cp312-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (45.6 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

comfy_kitchen-0.2.27-cp312-abi3-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (40.7 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

comfy_kitchen-0.2.27-cp311-cp311-win_amd64.whl (32.9 MB view details)

Uploaded CPython 3.11Windows x86-64

comfy_kitchen-0.2.27-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (45.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

comfy_kitchen-0.2.27-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (40.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

comfy_kitchen-0.2.27-cp310-cp310-win_amd64.whl (32.9 MB view details)

Uploaded CPython 3.10Windows x86-64

comfy_kitchen-0.2.27-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (45.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

comfy_kitchen-0.2.27-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (40.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

File details

Details for the file comfy_kitchen-0.2.27-py3-none-any.whl.

File metadata

  • Download URL: comfy_kitchen-0.2.27-py3-none-any.whl
  • Upload date:
  • Size: 161.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for comfy_kitchen-0.2.27-py3-none-any.whl
Algorithm Hash digest
SHA256 10b4f558679e2aa78ed4a3c5db6d51e01c9215c75cd91fee94154723474966c5
MD5 51d73671191180c56b2a59ba0c77a60e
BLAKE2b-256 f321a4674892282514f4f0840c51bec47ee2f85e6084ac97a8f023b49f73b8e1

See more details on using hashes here.

File details

Details for the file comfy_kitchen-0.2.27-cp312-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for comfy_kitchen-0.2.27-cp312-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 bd0bb9d189e69e8bab7f386c005a4374ca6f25f2ce3028d6ad0e39ba50fc055f
MD5 8fcb6a0f54af64781ec5e79d9a75eb83
BLAKE2b-256 e889961eaa30b4f4c923de0f91ccd38079151a1e634abcbe152793d86193c37d

See more details on using hashes here.

File details

Details for the file comfy_kitchen-0.2.27-cp312-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for comfy_kitchen-0.2.27-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3d8173ec3ed028c27fc83899362e906dc043b6c78c49f554ba627121668cb618
MD5 fa8c42a107bd319f20ec5cd8fecaa7bd
BLAKE2b-256 edc318a4002ebcaa63224d7c0041977f4e112db3f91768c06dc710d3e23cca55

See more details on using hashes here.

File details

Details for the file comfy_kitchen-0.2.27-cp312-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for comfy_kitchen-0.2.27-cp312-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 30f8c29f07613617c0d530ecf421fd40368425d0bdae7fd95dec4d6c80ff3223
MD5 deca0e48de156fd47ce7a6ae838f44c0
BLAKE2b-256 46a722b03538071c7fe4efb43228d395271b1e7d572d94eca506a12bb16b785c

See more details on using hashes here.

File details

Details for the file comfy_kitchen-0.2.27-cp312-abi3-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for comfy_kitchen-0.2.27-cp312-abi3-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8cf938e93a3f9c23ce1a8edc87656a441c6b35a692dead6d5107d3944f486416
MD5 f4e68a94cbc63b674edc90a94ecaeb52
BLAKE2b-256 c827c9b8533a14fbfa477e38f47dc91b0b6dd878b72b88f1bac7eb4393f2c7db

See more details on using hashes here.

File details

Details for the file comfy_kitchen-0.2.27-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for comfy_kitchen-0.2.27-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 cd21d9826cdf7be05ad2ca6a06962f37ee8291d6e3d9aaefe327230b8102695b
MD5 cd7e3e900340b11a010238f882d141cd
BLAKE2b-256 84897812ddd75e8c9bd1e62eb2de5978b0b8dc49daca90c80775a6c72b527fab

See more details on using hashes here.

File details

Details for the file comfy_kitchen-0.2.27-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for comfy_kitchen-0.2.27-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8c9decd0ce60e6fe641dbdaf5c7310d2715c991f9ff4f525e716591fac360782
MD5 02fec8faec3fa9b8dfa1a7f4a21eb736
BLAKE2b-256 9321f1c82779e565958a665e9437b67c84e606530d511f90afc15037f4cfee06

See more details on using hashes here.

File details

Details for the file comfy_kitchen-0.2.27-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for comfy_kitchen-0.2.27-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6f67a34657de86b7ee8b78d7b5034e4bfd50556e9bf249c57b2ac331e62e7cdc
MD5 f14d745ef8b899ed65f3da3ab1445000
BLAKE2b-256 faf3058bd6631835e0bb8b5c1f1464e67c5b4ed2fe0999b7933d59726ae2a2ff

See more details on using hashes here.

File details

Details for the file comfy_kitchen-0.2.27-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for comfy_kitchen-0.2.27-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d2997f2c392462ad1ced6a7258a5af93b6920d8548bef235a556d78282bab436
MD5 aa90bea6b7bc23a52501a8d3884b52b9
BLAKE2b-256 b274a0de8f233725ab646342aec67b83f514d5121802e0d2725ded80f3181157

See more details on using hashes here.

File details

Details for the file comfy_kitchen-0.2.27-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for comfy_kitchen-0.2.27-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 75e0eae82ae930a5eb33ce1652f08a02ef76b3482126c34987afc9a9e7ed4c2f
MD5 40705c7043a0653ed131cb7a289f5596
BLAKE2b-256 0c5b8456ba3fbcfe0b8ab5322719b7584067d3f2ed82384254139d37137dec9f

See more details on using hashes here.

File details

Details for the file comfy_kitchen-0.2.27-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for comfy_kitchen-0.2.27-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0409b8fa02218155eeeff647a15959be4aaa6abdb15e337fea597fa7c20c3db5
MD5 17e62e1a38c7b6690f6c263dc71b1e88
BLAKE2b-256 c549f4f814ca021112c6e00f55fd4b7e0f9ae8aac06baa62cb941b85342f095c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page