ci : add wrapper scripts for cl.exe and nvcc.exe #28
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: CI | |
| on: | |
| push: | |
| branches: | |
| - master | |
| pull_request: | |
| types: [opened, synchronize, reopened] | |
| workflow_dispatch: | |
| inputs: | |
| create_release: | |
| description: 'Create new release' | |
| required: true | |
| type: boolean | |
| pre_release_tag: | |
| description: 'Pre-release tag name' | |
| required: false | |
| type: string | |
| run_type: | |
| description: 'Workflow type to run' | |
| required: true | |
| type: choice | |
| options: | |
| - full-ci | |
| - release-only | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: write # for creating release | |
| env: | |
| BRANCH_NAME: ${{ github.head_ref || github.ref_name }} | |
| ubuntu_image: "ubuntu:22.04" | |
| VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite" | |
| jobs: | |
| determine-tag: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| tag_name: ${{ steps.tag.outputs.name }} | |
| steps: | |
| - name: Checkout with full history | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Determine tag name | |
| id: tag | |
| shell: bash | |
| run: | | |
| BUILD_NUMBER=$(git rev-list --count HEAD) | |
| SHORT_HASH=$(git rev-parse --short=7 HEAD) | |
| CUSTOM_TAG="${{ github.event.inputs.pre_release_tag }}" | |
| echo "Raw values:" | |
| echo "BUILD_NUMBER: $BUILD_NUMBER" | |
| echo "SHORT_HASH: $SHORT_HASH" | |
| echo "BRANCH_NAME: ${{ env.BRANCH_NAME }}" | |
| echo "CUSTOM_TAG: $CUSTOM_TAG" | |
| # Use custom tag if provided | |
| if [[ -n "$CUSTOM_TAG" ]]; then | |
| echo "Using custom tag" | |
| TAG_NAME="${CUSTOM_TAG}" | |
| elif [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then | |
| echo "Using master branch format" | |
| TAG_NAME="b${BUILD_NUMBER}" | |
| else | |
| echo "Using non-master branch format" | |
| SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-') | |
| TAG_NAME="${SAFE_NAME}-b${BUILD_NUMBER}-${SHORT_HASH}" | |
| fi | |
| echo "Final tag name: $TAG_NAME" | |
| echo "name=$TAG_NAME" >> $GITHUB_OUTPUT | |
| windows-cublas: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: windows-2019 | |
| strategy: | |
| matrix: | |
| build: [Release] | |
| arch: [x64] | |
| cublas: [ON] | |
| sdl2: [ON] | |
| cuda-toolkit: [12.2.0, 11.8.0] | |
| include: | |
| - arch: x64 | |
| sdl2: ON | |
| sdl2_ver: 2.28.5 | |
| steps: | |
| - name: Clone repository | |
| uses: actions/checkout@v4 | |
| - name: Install ccache | |
| uses: hendrikmuhs/[email protected] | |
| with: | |
| key: ${{ github.job }}-${{ matrix.cuda-toolkit }}-${{ matrix.build }} | |
| variant: sccache | |
| evict-old-files: 1d | |
| - name: Configure CUDA compilation cache | |
| run: | | |
| New-Item -Path "${{ github.workspace }}\cuda_cache" -ItemType Directory -Force | |
| echo "CUDA_CACHE_PATH=${{ github.workspace }}\cuda_cache" | Out-File -FilePath $env:GITHUB_ENV -Append | |
| echo "CUDA_CACHE_MAXSIZE=4294967296" | Out-File -FilePath $env:GITHUB_ENV -Append | |
| - name: Install Cuda Toolkit 11.8.0 | |
| if: ${{ matrix.cuda-toolkit == '11.8.0' }} | |
| run: | | |
| $CUDA_VERSION = ${{ matrix.cuda-toolkit }} | |
| $CUDA_TOOLKIT_DIR = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v$CUDA_VERSION" | |
| $CUDA_DOWNLOAD = "https://developer.download.nvidia.com/compute/cuda/redist" | |
| # Components versions | |
| $CUDART_VER = "11.8.89" | |
| $NVCC_VER = "11.8.89" | |
| $NVRTC_VER = "11.8.89" | |
| $CUBLAS_VER = "11.8.1.74" | |
| $NVTX_VER = "11.8.86" | |
| $VS_VER = "11.8.86" | |
| $NVPROF_VER = "11.8.87" | |
| $CCCL_VER = "11.8.89" | |
| # Create the directory where the CUDA Toolkit will be installed | |
| mkdir -p $CUDA_TOOLKIT_DIR | |
| # Install unzip to extract the downloaded files | |
| choco install unzip -y | |
| # Download all the required components | |
| curl -O "$CUDA_DOWNLOAD/cuda_cudart/windows-x86_64/cuda_cudart-windows-x86_64-${CUDART_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/cuda_nvcc/windows-x86_64/cuda_nvcc-windows-x86_64-${NVCC_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/cuda_nvrtc/windows-x86_64/cuda_nvrtc-windows-x86_64-${NVRTC_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/libcublas/windows-x86_64/libcublas-windows-x86_64-${CUBLAS_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/cuda_nvtx/windows-x86_64/cuda_nvtx-windows-x86_64-${NVTX_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/visual_studio_integration/windows-x86_64/visual_studio_integration-windows-x86_64-${VS_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/cuda_nvprof/windows-x86_64/cuda_nvprof-windows-x86_64-${NVPROF_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/cuda_cccl/windows-x86_64/cuda_cccl-windows-x86_64-${CCCL_VER}-archive.zip" | |
| # Extract all the downloaded files to the CUDA Toolkit directory | |
| unzip '*.zip' -d $CUDA_TOOLKIT_DIR | |
| # Copy all the extracted files to the main CUDA Toolkit directory | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_cudart-windows-x86_64-${CUDART_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_nvcc-windows-x86_64-${NVCC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_nvrtc-windows-x86_64-${NVRTC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\libcublas-windows-x86_64-${CUBLAS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_nvtx-windows-x86_64-${NVTX_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_nvprof-windows-x86_64-${NVPROF_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_cccl-windows-x86_64-${CCCL_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\visual_studio_integration-windows-x86_64-${VS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| # Visual Studio integration | |
| xcopy "$CUDA_TOOLKIT_DIR\visual_studio_integration-windows-x86_64-${VS_VER}-archive\visual_studio_integration\MSBuildExtensions\*" "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\v160\BuildCustomizations" /E /I /H /Y | |
| # Set environment variables | |
| echo "$CUDA_TOOLKIT_DIR\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
| echo "$CUDA_TOOLKIT_DIR\libnvvp" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
| echo "CUDA_PATH=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 | |
| echo "CUDA_PATH_V11_8=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 | |
| - name: Install Cuda Toolkit 12.2.0 | |
| if: ${{ matrix.cuda-toolkit == '12.2.0' }} | |
| run: | | |
| $CUDA_VERSION = ${{ matrix.cuda-toolkit }} | |
| $CUDA_TOOLKIT_DIR = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v$CUDA_VERSION" | |
| $CUDA_DOWNLOAD = "https://developer.download.nvidia.com/compute/cuda/redist" | |
| # Components versions | |
| $CUDART_VER = "12.2.140" | |
| $NVCC_VER = "12.2.140" | |
| $NVRTC_VER = "12.2.140" | |
| $CUBLAS_VER = "12.2.5.6" | |
| $NVTX_VER = "12.2.140" | |
| $PROFILER_VER = "12.2.140" | |
| $VS_VER = "12.2.140" | |
| $NVPROF_VER = "12.2.142" | |
| $CCCL_VER = "12.2.140" | |
| # Create the directory where the CUDA Toolkit will be installed | |
| mkdir -p $CUDA_TOOLKIT_DIR | |
| # Install unzip to extract the downloaded files | |
| choco install unzip -y | |
| # Download all the required components | |
| curl -O "$CUDA_DOWNLOAD/cuda_cudart/windows-x86_64/cuda_cudart-windows-x86_64-${CUDART_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/cuda_nvcc/windows-x86_64/cuda_nvcc-windows-x86_64-${NVCC_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/cuda_nvrtc/windows-x86_64/cuda_nvrtc-windows-x86_64-${NVRTC_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/libcublas/windows-x86_64/libcublas-windows-x86_64-${CUBLAS_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/cuda_nvtx/windows-x86_64/cuda_nvtx-windows-x86_64-${NVTX_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/cuda_profiler_api/windows-x86_64/cuda_profiler_api-windows-x86_64-${PROFILER_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/visual_studio_integration/windows-x86_64/visual_studio_integration-windows-x86_64-${VS_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/cuda_nvprof/windows-x86_64/cuda_nvprof-windows-x86_64-${NVPROF_VER}-archive.zip" | |
| curl -O "$CUDA_DOWNLOAD/cuda_cccl/windows-x86_64/cuda_cccl-windows-x86_64-${CCCL_VER}-archive.zip" | |
| # Extract all the downloaded files to the CUDA Toolkit directory | |
| unzip '*.zip' -d $CUDA_TOOLKIT_DIR | |
| # Copy all the extracted files to the main CUDA Toolkit directory | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_cudart-windows-x86_64-${CUDART_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_nvcc-windows-x86_64-${NVCC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_nvrtc-windows-x86_64-${NVRTC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\libcublas-windows-x86_64-${CUBLAS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_nvtx-windows-x86_64-${NVTX_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_nvprof-windows-x86_64-${NVPROF_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_cccl-windows-x86_64-${CCCL_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\cuda_profiler_api-windows-x86_64-${PROFILER_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| xcopy "$CUDA_TOOLKIT_DIR\visual_studio_integration-windows-x86_64-${VS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y | |
| # Visual Studio integration | |
| xcopy "$CUDA_TOOLKIT_DIR\visual_studio_integration-windows-x86_64-${VS_VER}-archive\visual_studio_integration\MSBuildExtensions\*" "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\v160\BuildCustomizations" /E /I /H /Y | |
| # Set environment variables | |
| echo "$CUDA_TOOLKIT_DIR\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
| echo "$CUDA_TOOLKIT_DIR\libnvvp" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
| echo "CUDA_PATH=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 | |
| echo "CUDA_PATH_V12_2=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 | |
| - name: Cache CUDA compilation results | |
| uses: actions/cache@v3 | |
| with: | |
| path: ${{ github.workspace }}/cuda_cache | |
| key: cuda-cache-${{ runner.os }}-${{ matrix.cuda-toolkit }}-${{ hashFiles('**/*.cu', '**/*.cuh') }} | |
| restore-keys: | | |
| cuda-cache-${{ runner.os }}-${{ matrix.cuda-toolkit }}- | |
| - name: Add msbuild to PATH | |
| uses: microsoft/setup-msbuild@v2 | |
| - name: Install 7-Zip | |
| run: choco install 7zip -y | |
| - name: Fetch SDL2 and set SDL2_DIR | |
| if: matrix.sdl2 == 'ON' | |
| run: | | |
| Invoke-WebRequest -Uri https://github.com/libsdl-org/SDL/releases/download/release-${{ matrix.sdl2_ver }}/SDL2-devel-${{ matrix.sdl2_ver }}-VC.zip -OutFile sdl2.zip | |
| 7z x sdl2.zip | |
| echo "SDL2_DIR=${{ github.workspace }}\SDL2-${{ matrix.sdl2_ver }}\cmake" | Out-File -FilePath $env:GITHUB_ENV -Append | |
| echo "${{ github.workspace }}\SDL2-${{ matrix.sdl2_ver }}\cmake" > SDL2_PATH.txt | |
| - name: Check sccache status before build | |
| run: | | |
| sccache --show-stats | |
| - name: Build Project | |
| shell: cmd | |
| run: | | |
| cmake --version | |
| call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat" | |
| if not exist "D:\a\whisper.cpp\whisper.cpp\.sccache" mkdir "D:\a\whisper.cpp\whisper.cpp\.sccache" | |
| set SCCACHE_DIR=D:\a\whisper.cpp\whisper.cpp\.sccache | |
| set SCCACHE_CACHE_SIZE=500M | |
| set SCCACHE_LOG=debug | |
| set SCCACHE_DIRECT=true | |
| echo @echo off > cl-wrapper.bat | |
| echo sccache cl.exe %%* >> cl-wrapper.bat | |
| echo @echo off > nvcc-wrapper.bat | |
| echo sccache %CUDA_PATH%\bin\nvcc.exe %%* >> nvcc-wrapper.bat | |
| set CC=%CD%\cl-wrapper.bat | |
| set CXX=%CD%\cl-wrapper.bat | |
| set CUDACXX=%CD%\nvcc-wrapper.bat | |
| mkdir cuda-wrapper | |
| echo @echo off > cuda-wrapper\nvcc.bat | |
| echo sccache %CUDA_PATH%\bin\nvcc.exe %%* >> cuda-wrapper\nvcc.bat | |
| set PATH=%CD%\cuda-wrapper;%PATH% | |
| cmake -S . -B ./build -A ${{ matrix.arch }} ^ | |
| -DCMAKE_BUILD_TYPE=${{ matrix.build }} ^ | |
| -DGGML_CUDA=${{ matrix.cublas }} ^ | |
| -DCMAKE_CUDA_ARCHITECTURES=all ^ | |
| -DWHISPER_SDL2=${{ matrix.sdl2 }} ^ | |
| -DCMAKE_MSVC_DEBUG_INFORMATION_FORMAT=Embedded ^ | |
| -DCMAKE_POLICY_CMP0141=NEW ^ | |
| -DSDL2_DIR="%SDL2_DIR%" | |
| cmake --build build --config ${{ matrix.build }} -j %NUMBER_OF_PROCESSORS% | |
| - name: Check sccache status after build | |
| run: | | |
| sccache --show-stats | |
| - name: Copy CUDA DLLs | |
| run: | | |
| Get-ChildItem "$env:CUDA_PATH\bin\" -Filter "*.dll" | | |
| Copy-Item -Destination "build/bin/${{ matrix.build }}" | |
| - name: Copy SDL2.dll | |
| if: matrix.sdl2 == 'ON' | |
| run: copy "$env:SDL2_DIR/../lib/${{ matrix.arch }}/SDL2.dll" build/bin/${{ matrix.build }} | |
| - name: Upload binaries | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: whisper-cublas-${{ matrix.cuda-toolkit }}-bin-${{ matrix.arch }} | |
| path: build/bin/${{ matrix.build }} |