From f3fc63942f324d25511bd867f9411120df51407f Mon Sep 17 00:00:00 2001 From: Jamie Pine Date: Fri, 13 Mar 2026 21:19:24 -0700 Subject: [PATCH] Fix Linux release build exceeding 4GB PyInstaller limit Install CPU-only PyTorch on Linux and exclude nvidia modules from non-CUDA PyInstaller builds. --- .github/workflows/release.yml | 11 +++++------ backend/build_binary.py | 12 ++++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 01aacb0f..ac0489e5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -61,17 +61,16 @@ jobs: pip install pyinstaller pip install -r backend/requirements.txt + - name: Install CPU-only PyTorch (Linux) + if: matrix.platform == 'ubuntu-22.04' + run: | + pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu --force-reinstall --no-deps + - name: Install MLX dependencies (Apple Silicon only) if: matrix.backend == 'mlx' run: | pip install -r backend/requirements-mlx.txt - # - name: Install PyTorch with CUDA (Windows only) - # if: matrix.platform == 'windows-latest' - # run: | - # pip install torch --index-url https://download.pytorch.org/whl/cu121 --force-reinstall --no-deps - # pip install torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 - - name: Build Python server (Linux/macOS) if: matrix.platform != 'windows-latest' run: | diff --git a/backend/build_binary.py b/backend/build_binary.py index 1934db3c..9ce7db87 100644 --- a/backend/build_binary.py +++ b/backend/build_binary.py @@ -90,6 +90,18 @@ def build_server(cuda=False): '--hidden-import', 'torch.cuda', '--hidden-import', 'torch.backends.cudnn', ]) + else: + # Exclude NVIDIA CUDA packages from CPU-only builds to keep binary under 4GB. + # On Linux, pip may pull CUDA-enabled PyTorch by default which includes ~3GB + # of NVIDIA shared libraries that PyInstaller would bundle. + nvidia_packages = [ + 'nvidia', 'nvidia.cublas', 'nvidia.cuda_cupti', 'nvidia.cuda_nvrtc', + 'nvidia.cuda_runtime', 'nvidia.cudnn', 'nvidia.cufft', 'nvidia.curand', + 'nvidia.cusolver', 'nvidia.cusparse', 'nvidia.nccl', 'nvidia.nvjitlink', + 'nvidia.nvtx', + ] + for pkg in nvidia_packages: + args.extend(['--exclude-module', pkg]) # Add MLX-specific imports if building on Apple Silicon (never for CUDA builds) if is_apple_silicon() and not cuda: