From 9ce129e222f54bbf004bf3457e19df2b02b815e5 Mon Sep 17 00:00:00 2001 From: Junya Morioka Date: Thu, 11 Dec 2025 17:36:31 +0900 Subject: [PATCH] wip: add manylinux build --- .github/workflows/_build_linux_self_host.yml | 1 - .../_build_linux_self_host_manylinux.yml | 139 ++++++++++++++++++ .../workflows/test-self-hosted-manylinux.yml | 29 ++++ 3 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/_build_linux_self_host_manylinux.yml create mode 100644 .github/workflows/test-self-hosted-manylinux.yml diff --git a/.github/workflows/_build_linux_self_host.yml b/.github/workflows/_build_linux_self_host.yml index eee467a..c4bef3e 100644 --- a/.github/workflows/_build_linux_self_host.yml +++ b/.github/workflows/_build_linux_self_host.yml @@ -110,7 +110,6 @@ jobs: - name: Install build dependencies shell: bash run: | - sudo apt install -y ninja-build clang pip install -U pip setuptools==75.8.0 wheel packaging psutil - name: Build wheels diff --git a/.github/workflows/_build_linux_self_host_manylinux.yml b/.github/workflows/_build_linux_self_host_manylinux.yml new file mode 100644 index 0000000..c6a0a07 --- /dev/null +++ b/.github/workflows/_build_linux_self_host_manylinux.yml @@ -0,0 +1,139 @@ +# ######################################################### +# Build wheels with self-hosted runner +# ######################################################### + +name: "[Linux x86_64, self-hosted] Build wheels and upload to GitHub Releases" + +on: + workflow_call: + inputs: + flash-attn-version: + description: "Flash-Attention version" + required: true + type: string + python-version: + description: "Python version" + required: true + type: string + torch-version: + description: "PyTorch version" + required: true + type: string + cuda-version: + description: "CUDA version" + required: true + type: string + runner: + description: "Runner type" + required: false + type: string + default: '["self-hosted"]' + is-upload: + description: "Whether to upload the release asset" + required: false + type: boolean + default: true + container-image: + description: "Container image" + required: false + type: string + default: "quay.io/pypa/manylinux_2_28_x86_64" + +jobs: + build_wheels_self_hosted: + name: Build wheels and Upload (Linux x86_64, self-hosted runner) + runs-on: ${{ fromjson(inputs.runner) }} + container: + image: ${{ inputs.container-image }} + defaults: + run: + shell: bash + env: + TERM: xterm-256color + timeout-minutes: 2160 + + steps: + - name: Install tools + shell: bash + run: | + dnf install -y \ + curl \ + ca-certificates \ + sudo \ + wget \ + unzip \ + zip \ + git \ + gcc \ + gcc-c++ \ + clang \ + ninja-build \ + time + + - name: Install gh + shell: bash + run: | + sudo dnf install 'dnf-command(config-manager)' + sudo dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo + sudo dnf -y install gh --repo gh-cli + + - uses: actions/checkout@v4 + + - name: Configure Git safe directory + shell: bash + run: | + git config --global --add safe.directory $(pwd) + + - uses: actions/setup-python@v5 + with: + python-version: ${{ inputs.python-version }} + + - uses: mjun0812/setup-cuda@v1 + with: + version: ${{ inputs.cuda-version }} + + - name: Install build dependencies + shell: bash + run: | + pip install -U pip setuptools==75.8.0 wheel packaging psutil + + - name: Build wheels + timeout-minutes: 2160 + id: build_wheels + shell: bash + run: | + chmod +x build_linux.sh + ./build_linux.sh ${{ inputs.flash-attn-version }} ${{ inputs.python-version }} ${{ inputs.torch-version }} ${{ inputs.cuda-version }} + wheel_name=$(basename $(ls flash-attention/dist/*.whl | head -n 1)) + echo "WHEEL_NAME=$wheel_name" >> $GITHUB_OUTPUT + + - name: Install Test + shell: bash + run: | + pip uninstall -y flash-attn > /dev/null 2>&1 + pip install --no-cache-dir flash-attention/dist/${{ steps.build_wheels.outputs.WHEEL_NAME }} + python -c "import flash_attn; print(flash_attn.__version__)" + + - name: Upload Release Asset + if: ${{ inputs.is-upload }} + shell: bash + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + tag_name=${{ github.ref_name }} + wheel_path="flash-attention/dist/${{ steps.build_wheels.outputs.WHEEL_NAME }}" + + # Check if the file exists + if [ ! -f "$wheel_path" ]; then + echo "Error: Wheel file not found at $wheel_path" + exit 1 + fi + + # Upload the release asset using GitHub CLI + gh release upload "$tag_name" "$wheel_path" --clobber + + - name: Clean up + shell: bash + if: always() + run: | + rm -rf /opt/hostedtoolcache/Python diff --git a/.github/workflows/test-self-hosted-manylinux.yml b/.github/workflows/test-self-hosted-manylinux.yml new file mode 100644 index 0000000..ee4fb23 --- /dev/null +++ b/.github/workflows/test-self-hosted-manylinux.yml @@ -0,0 +1,29 @@ +name: Test self-hosted Linux build (Manylinux 2_28) + +on: + workflow_dispatch: + +jobs: + # ######################################################### + # Build wheels with self-hosted runner + # ######################################################### + build_wheels_self_hosted: + name: Build wheels and Upload (Linux x86_64, self-hosted runner, Manylinux 2_28) + uses: ./.github/workflows/_build_linux_self_host_manylinux.yml + strategy: + fail-fast: false + matrix: + flash-attn-version: ["2.8.3"] + python-version: ["3.13"] + torch-version: ["2.9.1"] + # https://developer.nvidia.com/cuda-toolkit-archive + cuda-version: ["13.0.1"] + runner: ['["self-hosted", "x64"]'] + use-container: [false] + with: + flash-attn-version: ${{ matrix.flash-attn-version }} + python-version: ${{ matrix.python-version }} + torch-version: ${{ matrix.torch-version }} + cuda-version: ${{ matrix.cuda-version }} + is-upload: false + runner: ${{ matrix.runner}}