diff --git a/.github/workflows/_build_linux_self_host.yml b/.github/workflows/_build_linux_self_host.yml index cd06429..ce0fad7 100644 --- a/.github/workflows/_build_linux_self_host.yml +++ b/.github/workflows/_build_linux_self_host.yml @@ -33,9 +33,15 @@ on: required: false type: boolean default: true + use-container: + description: "Whether to use container" + required: false + type: boolean + default: true jobs: build_wheels_self_hosted: + if: ${{ inputs.use-container }} name: Build wheels and Upload (Linux x86_64, self-hosted runner) runs-on: ${{ inputs.runner }} container: @@ -141,3 +147,122 @@ jobs: if: always() run: | rm -rf /opt/hostedtoolcache/Python + + build_wheels_self_hosted_no_container: + if: ${{ !inputs.use-container }} + name: Build wheels and Upload (Linux x86_64, self-hosted runner) + runs-on: ${{ inputs.runner }} + defaults: + run: + shell: bash + env: + DEBIAN_FRONTEND: noninteractive + TERM: xterm-256color + timeout-minutes: 2160 + steps: + - name: Check environment + shell: bash + run: | + cat /etc/os-release || true + echo "-----------------------------" + cat /etc/lsb-release || true + echo "-----------------------------" + lscpu || true + echo "-----------------------------" + df -h || true + echo "-----------------------------" + free -h || true + + - name: Install tools + shell: bash + run: | + apt-get update && apt-get install -y --no-install-recommends \ + curl \ + ca-certificates \ + sudo \ + software-properties-common \ + wget \ + unzip \ + zip \ + git \ + build-essential \ + gcc \ + g++ \ + clang \ + ninja-build \ + keyboard-configuration \ + time + + - name: Install gh + shell: bash + run: | + sudo mkdir -p -m 755 /etc/apt/keyrings + out=$(mktemp) + wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg + cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null + sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null + sudo apt update + sudo apt install gh -y + + - 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: | + sudo apt install -y ninja-build clang + 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-linux.yml b/.github/workflows/test-self-hosted-linux.yml index 1bbd924..2db3f0b 100644 --- a/.github/workflows/test-self-hosted-linux.yml +++ b/.github/workflows/test-self-hosted-linux.yml @@ -18,7 +18,8 @@ jobs: torch-version: ["2.9.1"] # https://developer.nvidia.com/cuda-toolkit-archive cuda-version: ["13.0.1"] - runner: ["self-hosted", "openci-runner-beta"] + runner: ["openci-runner-beta"] + use-container: [false] with: flash-attn-version: ${{ matrix.flash-attn-version }} python-version: ${{ matrix.python-version }} @@ -26,3 +27,4 @@ jobs: cuda-version: ${{ matrix.cuda-version }} is-upload: false runner: ${{ matrix.runner}} + use-container: ${{ matrix.use-container}}