From d2dcbe90b81f6764dffda27e4ff744dd42017773 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Tue, 24 Mar 2026 08:16:32 +0000 Subject: [PATCH] python3Packages.xformers: 0.0.30 -> 0.0.35 Diff: https://github.com/facebookresearch/xformers/compare/v0.0.30...v0.0.35 Changelog: https://github.com/facebookresearch/xformers/blob/0.0.35/CHANGELOG.md --- .../0001-fix-allow-building-without-git.patch | 25 -- .../python-modules/xformers/default.nix | 218 ++++++++++++------ 2 files changed, 151 insertions(+), 92 deletions(-) delete mode 100644 pkgs/development/python-modules/xformers/0001-fix-allow-building-without-git.patch diff --git a/pkgs/development/python-modules/xformers/0001-fix-allow-building-without-git.patch b/pkgs/development/python-modules/xformers/0001-fix-allow-building-without-git.patch deleted file mode 100644 index 54b79e3e2f69..000000000000 --- a/pkgs/development/python-modules/xformers/0001-fix-allow-building-without-git.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 4c2b65c47d328c2f20cc74adcec2286fee6cb5de Mon Sep 17 00:00:00 2001 -From: Yaroslav Bolyukin -Date: Tue, 30 Jan 2024 18:18:35 +0100 -Subject: [PATCH] fix: allow building without git - ---- - setup.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/setup.py b/setup.py -index e01c008..92eca62 100644 ---- a/setup.py -+++ b/setup.py -@@ -71,7 +71,7 @@ def get_flash_version() -> str: - ["git", "describe", "--tags", "--always"], - cwd=flash_dir, - ).decode("ascii")[:-1] -- except subprocess.CalledProcessError: -+ except Exception: - version = flash_dir / "version.txt" - if version.is_file(): - return version.read_text().strip() --- -2.43.0 - diff --git a/pkgs/development/python-modules/xformers/default.nix b/pkgs/development/python-modules/xformers/default.nix index ddceea21ff0d..1ad3c89c05c3 100644 --- a/pkgs/development/python-modules/xformers/default.nix +++ b/pkgs/development/python-modules/xformers/default.nix @@ -3,75 +3,83 @@ stdenv, buildPythonPackage, fetchFromGitHub, - which, - setuptools, - # runtime dependencies - numpy, + + # build-system torch, - # check dependencies - pytestCheckHook, - pytest-cov-stub, - # , pytest-mpi - pytest-timeout, - # , pytorch-image-models - hydra-core, - fairscale, - scipy, - cmake, - ninja, - triton, - networkx, - #, apex - einops, - transformers, - timm, - #, flash-attn + setuptools, + + # buildInputs openmp, + + # dependencies + numpy, + pynvml, + + # tests + einops, + fairscale, + hydra-core, + networkx, + pytest-cov-stub, + pytest-timeout, + pytestCheckHook, + scipy, + timm, + transformers, + triton, + python, + + # passthru + xformers, + writableTmpDirAsHomeHook, }: let inherit (torch) cudaCapabilities cudaPackages cudaSupport; - # version 0.0.32.post2 was confirmed to break CUDA. - # Remove this note once the latest published revision "just works". - version = "0.0.30"; effectiveStdenv = if cudaSupport then cudaPackages.backendStdenv else stdenv; in -buildPythonPackage.override { stdenv = effectiveStdenv; } { +buildPythonPackage.override { stdenv = effectiveStdenv; } (finalAttrs: { pname = "xformers"; - inherit version; + version = "0.0.35"; pyproject = true; src = fetchFromGitHub { owner = "facebookresearch"; repo = "xformers"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; fetchSubmodules = true; - hash = "sha256-ozaw9z8qnGpZ28LQNtwmKeVnrn7KDWNeJKtT6g6Q/W0="; + hash = "sha256-UqpRHLN0INpW6sA8DbQCSeL8uhS+IoW60UPVUIh1NY0="; }; - patches = [ ./0001-fix-allow-building-without-git.patch ]; + # ModuleNotFoundError: No module named 'xformers.components' + postPatch = '' + touch xformers/components/__init__.py + touch xformers/components/attention/__init__.py + ''; - build-system = [ setuptools ]; + build-system = [ + setuptools + torch + ]; preBuild = '' - cat << EOF > ./xformers/version.py - # noqa: C801 - __version__ = "${version}" - EOF - export MAX_JOBS=$NIX_BUILD_CORES ''; env = lib.attrsets.optionalAttrs cudaSupport { - TORCH_CUDA_ARCH_LIST = "${lib.concatStringsSep ";" torch.cudaCapabilities}"; + # Don't silently fallback to a non-CUDA build + FORCE_CUDA = 1; + + TORCH_CUDA_ARCH_LIST = "${lib.concatStringsSep ";" cudaCapabilities}"; }; buildInputs = - lib.optional stdenv.hostPlatform.isDarwin openmp + lib.optionals stdenv.hostPlatform.isDarwin [ + openmp + ] ++ lib.optionals cudaSupport ( with cudaPackages; [ - # flash-attn build cuda_cudart # cuda_runtime_api.h libcusparse # cusparse.h cuda_cccl # nv/target @@ -81,51 +89,127 @@ buildPythonPackage.override { stdenv = effectiveStdenv; } { ] ); - nativeBuildInputs = [ - ninja - which - ] - ++ lib.optionals cudaSupport (with cudaPackages; [ cuda_nvcc ]) - ++ lib.optional stdenv.hostPlatform.isDarwin openmp.dev; + nativeBuildInputs = + lib.optionals cudaSupport [ + cudaPackages.cuda_nvcc + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + openmp.dev + ]; dependencies = [ numpy torch + ] + ++ lib.optionals cudaSupport [ + pynvml ]; - pythonImportsCheck = [ "xformers" ]; - - # Has broken 0.03 version: - # https://github.com/NixOS/nixpkgs/pull/285495#issuecomment-1920730720 - passthru.skipBulkUpdate = true; - - dontUseCmakeConfigure = true; - - # see commented out missing packages - doCheck = false; + pythonImportsCheck = [ + "xformers" + "xformers.components" + "xformers.components.attention" + ]; nativeCheckInputs = [ - pytestCheckHook + einops + fairscale + hydra-core + networkx pytest-cov-stub pytest-timeout - hydra-core - fairscale + pytestCheckHook scipy - cmake - networkx - triton - # apex - einops - transformers timm - # flash-attn + transformers + triton ]; + preCheck = + # Otherwise the CPP bindings are not available and the GPU tests fail with: + # `fa2F@2.5.7-pt` is not supported because: + # xFormers wasn't build with CUDA support: False + '' + rm -rf xformers + '' + # Display information about the installation + + '' + ${python.interpreter} -m xformers.info + ''; + + enabledTestPaths = [ + "tests" + ]; + + disabledTestPaths = [ + # Those tests require access to the GPU and should be tagged accordingly: + # https://github.com/facebookresearch/xformers/pull/1385 + "tests/test_fwbw_overlap.py" + ]; + + disabledTests = + # The following tests fail without cudaSupport + lib.optionals (!cudaSupport) [ + # AssertionError: Torch not compiled with CUDA enabled + "test_flash_gqa_wrong_strides" + "test_memeff_compile" + "test_paged_attention" + "test_paged_attention_flash" + "test_triton_splitk_decoder" + "test_triton_splitk_decoder_manyqueries" + "test_unsupported_dropout_combine_flash_cutlass" + + # AssertionError: Should use Flash-Decoding with BMHK MQA + "test_dispatch_decoding_bmhk" + + # AssertionError: Should use Flash-Decoding with MQA + "test_dispatch_decoding_bmghk" + ]; + + passthru.gpuCheck = xformers.overridePythonAttrs (old: { + requiredSystemFeatures = [ "cuda" ]; + + # Run all tests, including the ones that need a GPU + disabledTestPaths = [ ]; + + disabledTests = (old.disabledTests or [ ]) ++ [ + # `fa3F@0.0.0` is not supported because: + # operator wasn't built - see `python -m xformers.info` for more info + "test_merge_training" + + # Not enough GPU memory (on a 20G RTX 4000 SFF Ada) + # triton.runtime.errors.OutOfResources: out of resource: + # shared memory, Required: 147456, Hardware limit: 101376. + "test_consistency" + "test_forward" + "test_logsumexp" + "test_mqa_decoding" + "test_tree_attention" + + # Tolerance issues: + # AssertionError: cutlassF-pt+cutlassB-pt:key: out=4.65625 and ref=3.1875 + # (diff=0.251953125 > 0) at (np.int64(0), np.int64(0), np.int64(4)) + # of shape (1, 4, 8) / atol=0.9, rtol=0.1/ total failing elements: 1 (3.12%) + "test_backward" + + # AssertionError: Legacy CUDA profiling requires use_cpu=True + "test_profiler_dispatcher_stream_workaround" + + # RuntimeError: two_four_sgemm_cutlass, /build/source/xformers/csrc/sparse24/gemm.cu:190, + # Got CUTLASS error: Error Internal + "test_linearw24" + ]; + + nativeCheckInputs = old.nativeCheckInputs ++ [ + writableTmpDirAsHomeHook + ]; + }); + meta = { description = "Collection of composable Transformer building blocks"; homepage = "https://github.com/facebookresearch/xformers"; - changelog = "https://github.com/facebookresearch/xformers/blob/${version}/CHANGELOG.md"; + changelog = "https://github.com/facebookresearch/xformers/blob/${finalAttrs.src.tag}/CHANGELOG.md"; license = lib.licenses.bsd3; maintainers = with lib.maintainers; [ happysalada ]; }; -} +})