#!/bin/bash set -x echo "=== Environment ===" python3 -c "import torch; print(f'torch={torch.__version__}, cuda={torch.version.cuda}, abi={torch._C._GLIBCXX_USE_CXX11_ABI}')" echo "" echo "=== Method 1: pip install flash-attn with HF mirror index ===" # The strangertoolshf repo on HF might have wheels # Try using hf-mirror.com to access HuggingFace HF_ENDPOINT=https://hf-mirror.com pip install flash-attn==2.8.3 \ --no-build-isolation \ --extra-index-url https://hf-mirror.com/strangertoolshf/flash_attention_2_wheelhouse/resolve/main/ \ 2>&1 | tail -20 python3 -c "import flash_attn; print(f'OK: {flash_attn.__version__}')" 2>&1 && exit 0 echo "" echo "=== Method 2: Direct pip install from PyPI with build from source ===" # flash-attn setup.py will try to download from GitHub # But we can set environment variable to use a mirror # Override the download URL in the setup.py by setting env MAX_JOBS=16 pip install flash-attn==2.8.3 --no-build-isolation 2>&1 | tail -30 python3 -c "import flash_attn; print(f'OK: {flash_attn.__version__}')" 2>&1 && exit 0 echo "" echo "=== Method 3: Build from HF source zip ===" cd /tmp rm -rf flash-attention-2.8.3* wget -q --timeout=60 "https://hf-mirror.com/strangertoolshf/flash_attention_2_wheelhouse/resolve/main/flash-attention-2.8.3.zip" -O flash-attention-2.8.3.zip 2>&1 if [ -f flash-attention-2.8.3.zip ] && [ $(stat -c%s flash-attention-2.8.3.zip) -gt 100000 ]; then echo "Source zip downloaded, building..." unzip -q flash-attention-2.8.3.zip cd flash-attention-2.8.3 MAX_JOBS=16 pip install . --no-build-isolation 2>&1 | tail -20 fi python3 -c "import flash_attn; print(f'OK: {flash_attn.__version__}')" 2>&1 echo "HF_DOWNLOAD_DONE"