test(ci): use MSVC 14.29 on Windows CUDA 11.8 #6
This file contains hidden or 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: Test CUDA 11.8 Wheels | |
| on: | |
| push: | |
| branches: | |
| - test/cuda-118-wheels-build | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| name: Build CUDA 11.8 wheel on ${{ matrix.os }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-22.04 | |
| - windows-2022 | |
| defaults: | |
| run: | |
| shell: pwsh | |
| env: | |
| CUDAVER: 11.8.0 | |
| steps: | |
| - name: Set up MSVC | |
| if: runner.os == 'Windows' | |
| uses: ilammy/msvc-dev-cmd@v1 | |
| with: | |
| arch: x64 | |
| toolset: 14.29 | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.9" | |
| cache: pip | |
| - name: Setup Mamba | |
| uses: conda-incubator/setup-miniconda@v3.1.0 | |
| with: | |
| activate-environment: llamacpp | |
| python-version: "3.9" | |
| miniforge-version: latest | |
| add-pip-as-python-dependency: true | |
| auto-activate-base: false | |
| - name: Install dependencies | |
| env: | |
| MAMBA_DOWNLOAD_FAILFAST: "0" | |
| MAMBA_NO_LOW_SPEED_LIMIT: "1" | |
| run: | | |
| $cudaVersion = $env:CUDAVER | |
| $cudaChannel = "nvidia/label/cuda-$cudaVersion" | |
| if ($IsLinux) { | |
| $cudaPackages = @( | |
| "${cudaChannel}::cuda-nvcc_linux-64=11.8.0", | |
| "${cudaChannel}::cuda-cccl=11.8.89", | |
| "${cudaChannel}::cuda-cudart=11.8.89", | |
| "${cudaChannel}::cuda-cudart-dev=11.8.89", | |
| "${cudaChannel}::cuda-driver-dev=11.8.89", | |
| "${cudaChannel}::libcublas=11.11.3.6", | |
| "${cudaChannel}::libcublas-dev=11.11.3.6" | |
| ) | |
| mamba install -y --channel-priority flexible --override-channels -c $cudaChannel $cudaPackages | |
| } elseif ($IsWindows) { | |
| $cudaPackages = @( | |
| "${cudaChannel}::cuda-nvcc_win-64=11.8.0", | |
| "${cudaChannel}::cuda-cccl=11.8.89", | |
| "${cudaChannel}::cuda-cudart=11.8.89", | |
| "${cudaChannel}::cuda-cudart-dev=11.8.89", | |
| "${cudaChannel}::libcublas=11.11.3.6", | |
| "${cudaChannel}::libcublas-dev=11.11.3.6" | |
| ) | |
| mamba install -y --channel-priority flexible --override-channels -c $cudaChannel $cudaPackages | |
| } else { | |
| throw 'Unsupported CUDA wheel build platform' | |
| } | |
| if ($LASTEXITCODE -ne 0) { | |
| exit $LASTEXITCODE | |
| } | |
| if ($IsWindows) { | |
| python -m pip install build wheel ninja | |
| } else { | |
| python -m pip install build wheel | |
| } | |
| - name: Build wheel | |
| run: | | |
| $pathSeparator = if ($IsWindows) { ';' } else { ':' } | |
| if ($IsWindows) { | |
| $cudaRoot = Join-Path $env:CONDA_PREFIX 'Library' | |
| } elseif (Test-Path (Join-Path $env:CONDA_PREFIX 'targets/x86_64-linux/include/cuda_runtime.h')) { | |
| $cudaRoot = Join-Path $env:CONDA_PREFIX 'targets/x86_64-linux' | |
| } else { | |
| $cudaRoot = $env:CONDA_PREFIX | |
| } | |
| $env:CUDA_PATH = $cudaRoot | |
| $env:CUDA_HOME = $cudaRoot | |
| $env:CUDAToolkit_ROOT = $cudaRoot | |
| $env:CUDA_TOOLKIT_ROOT_DIR = $cudaRoot | |
| $cudaRootCmake = $cudaRoot.Replace('\', '/') | |
| $env:CMAKE_ARGS = "-DCUDAToolkit_ROOT=$cudaRootCmake -DCUDA_TOOLKIT_ROOT_DIR=$cudaRootCmake" | |
| if ($IsLinux) { | |
| if (Test-Path '/usr/bin/g++-11') { | |
| $env:CC = '/usr/bin/gcc-11' | |
| $env:CXX = '/usr/bin/g++-11' | |
| $env:CUDAHOSTCXX = '/usr/bin/g++-11' | |
| $env:CMAKE_ARGS = "$env:CMAKE_ARGS -DCMAKE_CUDA_HOST_COMPILER=$env:CUDAHOSTCXX" | |
| } | |
| $env:CPATH = "$cudaRoot/include$pathSeparator$env:CPATH" | |
| $env:CPLUS_INCLUDE_PATH = "$cudaRoot/include$pathSeparator$env:CPLUS_INCLUDE_PATH" | |
| $env:LIBRARY_PATH = "$cudaRoot/lib$pathSeparator$env:CONDA_PREFIX/lib$pathSeparator$env:LIBRARY_PATH" | |
| $env:LD_LIBRARY_PATH = "$cudaRoot/lib$pathSeparator$env:CONDA_PREFIX/lib$pathSeparator$env:LD_LIBRARY_PATH" | |
| } else { | |
| $ninjaPath = ((Get-Command ninja -ErrorAction Stop).Source).Replace('\', '/') | |
| $env:CMAKE_GENERATOR = 'Ninja' | |
| $env:CMAKE_MAKE_PROGRAM = $ninjaPath | |
| $env:PATH = "$(Join-Path $cudaRoot 'bin')$pathSeparator$env:PATH" | |
| } | |
| if ($IsWindows) { | |
| $nvccCandidates = @( | |
| (Join-Path $cudaRoot 'bin\nvcc.exe'), | |
| (Join-Path $env:CONDA_PREFIX 'Library\bin\nvcc.exe'), | |
| (Join-Path $env:CONDA_PREFIX 'bin\nvcc.exe') | |
| ) | |
| } else { | |
| $nvccCandidates = @( | |
| (Join-Path $env:CONDA_PREFIX 'bin/nvcc'), | |
| (Join-Path $env:CONDA_PREFIX 'targets/x86_64-linux/bin/nvcc') | |
| ) | |
| } | |
| $nvccPath = $nvccCandidates | Where-Object { Test-Path $_ } | Select-Object -First 1 | |
| if (-not $nvccPath) { | |
| throw 'Failed to find nvcc in the conda environment' | |
| } | |
| $env:CUDACXX = $nvccPath | |
| $env:PATH = "$(Split-Path $nvccPath)$pathSeparator$env:PATH" | |
| if ($IsWindows) { | |
| $nvccPathCmake = $nvccPath.Replace('\', '/') | |
| $env:CUDACXX = $nvccPathCmake | |
| $env:CMAKE_ARGS = "-DCMAKE_CUDA_COMPILER=$nvccPathCmake -DCMAKE_CUDA_COMPILER_ARG1=-allow-unsupported-compiler -DCMAKE_MAKE_PROGRAM=$env:CMAKE_MAKE_PROGRAM $env:CMAKE_ARGS" | |
| } | |
| $env:VERBOSE = '1' | |
| $env:CMAKE_ARGS = "-DGGML_CUDA_FORCE_MMQ=ON -DGGML_CUDA=on -DCMAKE_CUDA_ARCHITECTURES=60-real;61-real;70-real;75-real;80-real;86-real;89-real -DCMAKE_CUDA_FLAGS=-allow-unsupported-compiler -DCMAKE_CUDA_FLAGS_INIT=-allow-unsupported-compiler $env:CMAKE_ARGS" | |
| $env:CMAKE_ARGS = "$env:CMAKE_ARGS -DGGML_AVX2=off -DGGML_FMA=off -DGGML_F16C=off" | |
| & $nvccPath --version | |
| python -m build --wheel | |
| Get-ChildItem dist | Select-Object Name, Length |