name: Build Wheels (CUDA) on: workflow_dispatch permissions: contents: write jobs: define_matrix: name: Define Build Matrix runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} defaults: run: shell: pwsh steps: - name: Define Job Output id: set-matrix run: | $matrix = @{ 'os' = @('ubuntu-latest', 'windows-latest') 'pyver' = @("3.9", "3.10", "3.11", "3.12") 'cuda' = @("12.1.1", "12.2.2", "12.3.2", "12.4.1") 'releasetag' = @("basic") } $matrixOut = ConvertTo-Json $matrix -Compress Write-Output ('matrix=' + $matrixOut) >> $env:GITHUB_OUTPUT build_wheels: name: Build Wheel ${{ matrix.os }} ${{ matrix.pyver }} ${{ matrix.cuda }} ${{ matrix.releasetag == 'wheels' && 'AVX2' || matrix.releasetag }} needs: define_matrix runs-on: ${{ matrix.os }} strategy: matrix: ${{ fromJSON(needs.define_matrix.outputs.matrix) }} defaults: run: shell: pwsh env: CUDAVER: ${{ matrix.cuda }} AVXVER: ${{ matrix.releasetag }} steps: - uses: actions/checkout@v4 with: submodules: "recursive" - uses: actions/setup-python@v5 with: python-version: ${{ matrix.pyver }} cache: 'pip' - name: Setup Mamba uses: conda-incubator/setup-miniconda@v3.0.4 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: VS Integration Cache id: vs-integration-cache if: runner.os == 'Windows' uses: actions/cache@v4.0.2 with: path: ./MSBuildExtensions key: cuda-${{ matrix.cuda }}-vs-integration - name: Get Visual Studio Integration if: runner.os == 'Windows' && steps.vs-integration-cache.outputs.cache-hit != 'true' run: | if ($env:CUDAVER -eq '12.1.1') {$x = '12.1.0'} else {$x = $env:CUDAVER} $links = (Invoke-RestMethod 'https://raw.githubusercontent.com/Jimver/cuda-toolkit/master/src/links/windows-links.ts').Trim().split().where({$_ -ne ''}) for ($i=$q=0;$i -lt $links.count -and $q -lt 2;$i++) {if ($links[$i] -eq "'$x',") {$q++}} Invoke-RestMethod $links[$i].Trim("'") -OutFile 'cudainstaller.zip' & 'C:\Program Files\7-Zip\7z.exe' e cudainstaller.zip -oMSBuildExtensions -r *\MSBuildExtensions\* > $null Remove-Item 'cudainstaller.zip' - name: Install Visual Studio Integration if: runner.os == 'Windows' run: | $y = (gi '.\MSBuildExtensions').fullname + '\*' (gi 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\*\BuildCustomizations').fullname.foreach({cp $y $_}) $cupath = 'CUDA_PATH_V' + $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.')).Replace('.','_') echo "$cupath=$env:CONDA_PREFIX" >> $env:GITHUB_ENV - name: Install Dependencies env: MAMBA_DOWNLOAD_FAILFAST: "0" MAMBA_NO_LOW_SPEED_LIMIT: "1" run: | $cudaVersion = $env:CUDAVER mamba install -y 'cuda' -c nvidia/label/cuda-$cudaVersion python -m pip install build wheel - name: Build Wheel run: | $cudaVersion = $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.')).Replace('.','') $env:CUDA_PATH = $env:CONDA_PREFIX $env:CUDA_HOME = $env:CONDA_PREFIX $env:CUDA_TOOLKIT_ROOT_DIR = $env:CONDA_PREFIX if ($IsLinux) { $env:LD_LIBRARY_PATH = $env:CONDA_PREFIX + '/lib:' + $env:LD_LIBRARY_PATH } $env:VERBOSE = '1' $env:CMAKE_ARGS = '-DLLAMA_CUBLAS=on -DCMAKE_CUDA_ARCHITECTURES=all' $env:CMAKE_ARGS = "-DLLAMA_CUDA_FORCE_MMQ=ON $env:CMAKE_ARGS" # if ($env:AVXVER -eq 'AVX') { $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DLLAMA_AVX2=off -DLLAMA_FMA=off -DLLAMA_F16C=off' # } # if ($env:AVXVER -eq 'AVX512') { # $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DLLAMA_AVX512=on' # } # if ($env:AVXVER -eq 'basic') { # $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DLLAMA_AVX=off -DLLAMA_AVX2=off -DLLAMA_FMA=off -DLLAMA_F16C=off' # } python -m build --wheel # write the build tag to the output Write-Output "CUDA_VERSION=$cudaVersion" >> $env:GITHUB_ENV - uses: softprops/action-gh-release@v2 with: files: dist/* # Set tag_name to -cu tag_name: ${{ github.ref_name }}-cu${{ env.CUDA_VERSION }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}