Spaces:
Running on Zero
Running on Zero
| # Docker Build Scripts | |
| This directory contains helper scripts used during the Docker image build process. | |
| ## Files | |
| ### patch_sageattention.py | |
| **Purpose**: Patches the SageAttention setup.py to support building without GPU present. | |
| **What it does**: | |
| - Adds support for the `TORCH_CUDA_ARCH_LIST` environment variable to SageAttention | |
| - Allows specifying target GPU architectures via environment variable | |
| - Enables building Docker images on machines without NVIDIA GPUs | |
| **Usage** (automatically called during Docker build): | |
| ```bash | |
| cd SageAttention | |
| python3 ../docker/patch_sageattention.py | |
| ``` | |
| **Why it's needed**: | |
| SageAttention's original setup.py tries to detect GPU hardware during build time using `torch.cuda.device_count()`. This fails in Docker builds because: | |
| 1. Docker builds don't have GPU access by default (even with `--gpus all`) | |
| 2. GPU access during build is not guaranteed across all Docker configurations | |
| 3. Build machines may not have the same GPU as the target runtime machine | |
| The patch adds a check for `TORCH_CUDA_ARCH_LIST` environment variable before attempting hardware detection, allowing explicit specification of target architectures. | |
| ### sageattention_setup.patch (not used) | |
| Legacy patch file - kept for reference. The Python script approach is preferred. | |
| ## How the Build Process Works | |
| 1. **Environment Setup**: `TORCH_CUDA_ARCH_LIST` is set in Dockerfile via ARG/ENV | |
| 2. **Patch Application**: `patch_sageattention.py` modifies SageAttention's setup.py | |
| 3. **Extension Build**: Modified setup.py reads `TORCH_CUDA_ARCH_LIST` and compiles for specified architectures | |
| 4. **SpargeAttn Build**: Already supports `TORCH_CUDA_ARCH_LIST` natively, no patch needed | |
| ## Maintenance | |
| If SageAttention is updated, one may need to: | |
| 1. Check if the patch still applies correctly | |
| 2. Update the target line in `patch_sageattention.py` if the setup.py structure changes | |
| 3. Test the build process with the new version | |
| The patch is designed to be non-intrusive and should work across most SageAttention versions that follow the same setup.py structure. | |