Build Wheels & Release #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build Wheels & Release | |
on: | |
workflow_dispatch: | |
inputs: | |
release: | |
description: 'Release? 1 = yes, 0 = no' | |
default: '0' | |
required: true | |
type: string | |
permissions: | |
contents: write | |
jobs: | |
build_wheels: | |
name: ${{ matrix.os }} Python=${{ matrix.pyver }} CUDA=${{ matrix.cuda }} ROCm=${{ matrix.rocm }} Torch=${{ matrix.torch }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
include: | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.8', cuda: '11.7.0', rocm: '', torch: '2.0.1', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6+PTX' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.8', cuda: '11.8.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.8', cuda: '12.1.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.9', cuda: '11.7.0', rocm: '', torch: '2.0.1', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6+PTX' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.9', cuda: '11.8.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.9', cuda: '12.1.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.10', cuda: '11.7.0', rocm: '', torch: '2.0.1', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6+PTX' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.10', cuda: '11.8.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.10', cuda: '12.1.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.11', cuda: '11.7.0', rocm: '', torch: '2.0.1', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6+PTX' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.11', cuda: '11.8.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.11', cuda: '12.1.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
- { artname: 'wheel', os: ubuntu-20.04, pyver: '3.12', cuda: '11.8.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
- { artname: 'wheel', os: ubuntu-20.04, pyver: '3.12', cuda: '12.1.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.8', cuda: '11.7.0', rocm: '', torch: '2.0.1', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.8', cuda: '11.8.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.8', cuda: '12.1.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.9', cuda: '11.7.0', rocm: '', torch: '2.0.1', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.9', cuda: '11.8.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.9', cuda: '12.1.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.10', cuda: '11.7.0', rocm: '', torch: '2.0.1', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.10', cuda: '11.8.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.10', cuda: '12.1.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.11', cuda: '11.7.0', rocm: '', torch: '2.0.1', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.11', cuda: '11.8.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.11', cuda: '12.1.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
- { artname: 'wheel', os: windows-latest, pyver: '3.12', cuda: '11.8.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
- { artname: 'wheel', os: windows-latest, pyver: '3.12', cuda: '12.1.0', rocm: '', torch: '2.3.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.9', cuda: '', rocm: '5.6', torch: '2.2.2', cudaarch: '' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.9', cuda: '', rocm: '6.0', torch: '2.3.0', cudaarch: '' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.10', cuda: '', rocm: '5.6', torch: '2.2.2', cudaarch: '' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.10', cuda: '', rocm: '6.0', torch: '2.3.0', cudaarch: '' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.11', cuda: '', rocm: '5.6', torch: '2.2.2', cudaarch: '' } | |
# - { artname: 'wheel', os: ubuntu-20.04, pyver: '3.11', cuda: '', rocm: '6.0', torch: '2.3.0', cudaarch: '' } | |
- { artname: 'wheel', os: ubuntu-20.04, pyver: '3.12', cuda: '', rocm: '5.6', torch: '2.2.2', cudaarch: '' } | |
- { artname: 'wheel', os: ubuntu-20.04, pyver: '3.12', cuda: '', rocm: '6.0', torch: '2.3.0', cudaarch: '' } | |
# sdist | |
# - { artname: 'sdist', os: ubuntu-20.04, pyver: '3.11', cuda: '', rocm: '', torch: '2.3.0', cudaarch: '' } | |
# Extra Torch 2.2 wheels for Windows until PyTorch resolves the shm.dll issue | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.8', cuda: '11.8.0', rocm: '', torch: '2.2.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.8', cuda: '12.1.0', rocm: '', torch: '2.2.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.9', cuda: '11.8.0', rocm: '', torch: '2.2.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.9', cuda: '12.1.0', rocm: '', torch: '2.2.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.10', cuda: '11.8.0', rocm: '', torch: '2.2.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.10', cuda: '12.1.0', rocm: '', torch: '2.2.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.11', cuda: '11.8.0', rocm: '', torch: '2.2.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
# - { artname: 'wheel', os: windows-latest, pyver: '3.11', cuda: '12.1.0', rocm: '', torch: '2.2.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
- { artname: 'wheel', os: windows-latest, pyver: '3.12', cuda: '11.8.0', rocm: '', torch: '2.2.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
- { artname: 'wheel', os: windows-latest, pyver: '3.12', cuda: '12.1.0', rocm: '', torch: '2.2.0', cudaarch: '6.0 6.1 7.0 7.5 8.0 8.6 8.9 9.0+PTX' } | |
defaults: | |
run: | |
shell: pwsh | |
steps: | |
# Free disk space | |
- name: Free Disk Space | |
uses: jlumbroso/[email protected] | |
if: runner.os == 'Linux' | |
with: | |
tool-cache: true | |
android: true | |
dotnet: true | |
haskell: true | |
large-packages: false | |
swap-storage: true | |
# Setup Python | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v3 | |
with: | |
python-version: ${{ matrix.pyver }} | |
# Get version string from package | |
- name: Get version string | |
id: package_version | |
run: | | |
$versionString = Get-Content $(Join-Path 'exllamav2' 'version.py') -raw | |
if ($versionString -match '__version__ = "(\d+\.(?:\d+\.?(?:dev\d+)?)*)"') | |
{ | |
Write-Output $('::notice file=build-wheels-release.yml,line=200,title=Package Version::Detected package version is: {0}' -f $Matches[1]) | |
Write-Output "PACKAGE_VERSION=$($Matches[1])" >> "$env:GITHUB_OUTPUT" | |
} | |
else | |
{ | |
Write-Output '::error file=build-wheels-release.yml,line=203::Could not parse version from exllamav2/version.py! You must upload wheels manually!' | |
Write-Output "PACKAGE_VERSION=None" >> "$env:GITHUB_OUTPUT" | |
} | |
# Install ROCm SDK, apparently needs to happen before setting up Python | |
- name: Build for ROCm | |
if: matrix.rocm != '' | |
shell: bash | |
run: | | |
# --- Install ROCm SDK | |
export ROCM_VERSION=${{ matrix.rocm }} | |
export TORCH_VERSION=${{ matrix.torch }} | |
[ ! -d /etc/apt/keyrings ] && sudo mkdir --parents --mode=0755 /etc/apt/keyrings | |
wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null | |
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/$ROCM_VERSION focal main" | sudo tee --append /etc/apt/sources.list.d/rocm.list | |
echo -e 'Package: *\nPin: release o=repo.radeon.com\nPin-Priority: 600' | sudo tee /etc/apt/preferences.d/rocm-pin-600 | |
sudo apt update | |
sudo apt install rocm-hip-sdk -y | |
sudo apt clean -y | |
echo "/opt/rocm/bin" >> $GITHUB_PATH | |
echo "ROCM_PATH=/opt/rocm" >> $GITHUB_ENV | |
echo "ROCM_VERSION=$ROCM_VERSION" >> $GITHUB_ENV | |
echo "USE_ROCM=1" >> $GITHUB_ENV | |
# --- Install dependencies | |
pip3 install torch==${{ matrix.torch }} --index-url="https://download.pytorch.org/whl/rocm$ROCM_VERSION" | |
pip3 install --upgrade build wheel safetensors sentencepiece ninja | |
pip3 install --upgrade setuptools==65.5.0 | |
pip3 cache purge | |
# --- Build wheel | |
python3 -m build -n --wheel -C--build-option=egg_info "-C--build-option=--tag-build=+rocm${{ matrix.rocm }}-torch${{ matrix.torch }}" | |
# Build for CUDA | |
- name: Setup Mamba | |
if: matrix.cuda != '' | |
uses: conda-incubator/[email protected] | |
with: | |
activate-environment: "build" | |
python-version: ${{ matrix.pyver }} | |
miniforge-variant: Mambaforge | |
miniforge-version: latest | |
use-mamba: true | |
add-pip-as-python-dependency: true | |
auto-activate-base: false | |
- name: Build for CUDA | |
if: matrix.cuda != '' | |
run: | | |
# --- Install CUDA using Conda | |
$cudaVersion = '${{ matrix.cuda }}' | |
$cudaVersionPytorch = '${{ matrix.cuda }}'.Remove('${{ matrix.cuda }}'.LastIndexOf('.')).Replace('.','') | |
$cudaChannels = '' | |
$cudaNum = [int]$cudaVersion.substring($cudaVersion.LastIndexOf('.')+1) | |
while ($cudaNum -ge 0) { $cudaChannels += '-c nvidia/label/cuda-' + $cudaVersion.Remove($cudaVersion.LastIndexOf('.')+1) + $cudaNum + ' '; $cudaNum-- } | |
mamba install -y 'cuda' $cudaChannels.TrimEnd().Split() | |
if (!(mamba list cuda)[-1].contains('cuda')) {sleep -s 10; mamba install -y 'cuda' $cudaChannels.TrimEnd().Split()} | |
if (!(mamba list cuda)[-1].contains('cuda')) {throw 'CUDA Toolkit failed to install!'} | |
$env:CUDA_PATH = $env:CONDA_PREFIX | |
$env:CUDA_HOME = $env:CONDA_PREFIX | |
if ($IsLinux) {$env:LD_LIBRARY_PATH = $env:CONDA_PREFIX + '/lib:' + $env:LD_LIBRARY_PATH} | |
# --- Install dependencies | |
python -m pip install torch==${{ matrix.torch }} --index-url https://download.pytorch.org/whl/cu$cudaVersionPytorch | |
python -m pip install --upgrade setuptools==65.5.1 | |
python -m pip install --upgrade build wheel safetensors sentencepiece ninja | |
# --- Build wheel | |
$BUILDTAG = "+cu$cudaVersionPytorch-torch${{ matrix.torch }}" | |
$env:TORCH_CUDA_ARCH_LIST = '${{ matrix.cudaarch }}' | |
python -m build -n --wheel -C--build-option=egg_info "-C--build-option=--tag-build=$BUILDTAG" | |
# Build sdist | |
- name: Build sdist | |
if: matrix.cuda == '' && matrix.rocm == '' | |
run: | | |
# --- Install dependencies | |
python -m pip install torch==${{ matrix.torch }} --index-url https://download.pytorch.org/whl/cpu | |
python -m pip install build wheel ninja | |
# --- Build wheel | |
$env:EXLLAMA_NOCOMPILE=1 | |
python -m build -n | |
# Upload files | |
- uses: actions/upload-artifact@v3 | |
if: matrix.artname == 'wheel' | |
with: | |
name: 'wheel' | |
path: ./dist/* | |
- uses: actions/upload-artifact@v3 | |
if: matrix.artname == 'sdist' | |
with: | |
name: 'sdist' | |
path: ./dist/* | |
- name: Upload files to GitHub release | |
if: steps.package_version.outputs.PACKAGE_VERSION != 'None' && inputs.release == '1' | |
uses: svenstaro/[email protected] | |
with: | |
file: ./dist/*.whl | |
tag: ${{ format('v{0}', steps.package_version.outputs.PACKAGE_VERSION) }} | |
file_glob: true | |
overwrite: true | |
release_name: ${{ steps.package_version.outputs.PACKAGE_VERSION }} |