Skip to content

Build bitsandbytes Windows Wheel Latest #12

Build bitsandbytes Windows Wheel Latest

Build bitsandbytes Windows Wheel Latest #12

name: Build bitsandbytes Windows Wheel Latest
on: workflow_dispatch
permissions:
contents: write
jobs:
compile_cuda_new:
# Uses Windows-2022 and Cuda Toolkit >= 11.6 with full version spec as string: "11.6.2"
# Uses 11.6 as CPU build target, version must be included to build CPU binaries
# See https://github.com/Jimver/cuda-toolkit/blob/master/src/links/windows-links.ts for supported versions
name: Compile Cuda Code 2022
runs-on: windows-2022
strategy:
matrix:
cuda: ["11.6.2", "11.7.1", "11.8.0", "12.0.1", "12.1.0", "12.2.0"]
cublas: ["0", "1"]
defaults:
run:
shell: pwsh
env:
CUDAVER: ${{ matrix.cuda }}
steps:
- name: Get Visual Studio Integration
if: matrix.cuda != '12.2.0'
uses: Jimver/cuda-toolkit@v0.2.10
with:
cuda: ${{ matrix.cuda }}
method: 'network'
sub-packages: '["visual_studio_integration"]'
- name: Get Visual Studio Integration 12.2
if: matrix.cuda == '12.2.0'
run: |
Invoke-RestMethod 'https://developer.download.nvidia.com/compute/cuda/12.2.0/network_installers/cuda_12.2.0_windows_network.exe' -OutFile "$env:RUNNER_TEMP\cudainstaller.exe"
Start-Process "$env:RUNNER_TEMP\cudainstaller.exe" -wait -ArgumentList '-s visual_studio_integration_12.2'
echo 'CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.2' >> $env:GITHUB_ENV
- name: Install Visual Studio Integration
run: |
$x = (dir $env:CUDA_PATH -dir -recurse -depth 2).where({$_.name -eq 'visual_studio_integration'}).fullname
$y = (dir $x -dir -recurse).where({$_.name -eq 'MSBuildExtensions'}).fullname + '\*'
(gi 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\*\BuildCustomizations').fullname.foreach({cp $y $_})
- uses: actions/checkout@v3
with:
repository: 'jllllll/bitsandbytes'
ref: 'cmake_windows'
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Setup Mamba
uses: conda-incubator/setup-miniconda@v2.2.0
with:
activate-environment: "build"
python-version: "3.10"
miniforge-variant: Mambaforge
miniforge-version: latest
use-mamba: true
add-pip-as-python-dependency: true
auto-activate-base: false
- name: Install Dependencies
run: |
$cudaVersion = $env:CUDAVER
$cudaChannels = ''
$cudaNum = [int]$cudaVersion.substring($cudaVersion.LastIndexOf('.')+1)
while ($cudaNum -ge 0) { $cudaChannels += '-c nvidia/label/cuda-' + $cudaVersion.Remove($cudaVersion.LastIndexOf('.')+1) + $cudaNum + ' '; $cudaNum-- }
$cudaChannels = $cudaChannels.TrimEnd() + ' -c conda-forge -c defaults'
mamba install -y 'cmake' 'ninja' 'cuda' $cudaChannels.Split()
- name: Compile Cuda Code
if: matrix.cublas == '0'
run: |
$env:CUDA_PATH = $env:CONDA_PREFIX
$cudaVersion = $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.'))
$x = 'CUDA_PATH_V' + $cudaVersion.Replace('.','_')
[Environment]::SetEnvironmentVariable($x, $env:CUDA_PATH)
if (!(Test-Path '.\BuildArtifacts\')) { mkdir '.\BuildArtifacts' }
cmake -S . -B "./build_$cudaVersion_0" -G "Visual Studio 17 2022" -T "cuda=$cudaVersion" -D "NO_CUBLASLT=0" -D "CUDA_TARGET_ARCH_FEATURE_LEVEL=$cudaVersion" -D "CIBUILD=1"
cmake --build "./build_$cudaVersion_0" --target libbitsandbytes_cuda --config Release
if ($cudaVersion -eq '11.6') { cmake --build "./build_$cudaVersion_0" --target libbitsandbytes_cpu --config Release }
- name: Compile Cuda Code nocublaslt
if: matrix.cublas == '1'
run: |
$env:CUDA_PATH = $env:CONDA_PREFIX
$cudaVersion = $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.'))
$x = 'CUDA_PATH_V' + $cudaVersion.Replace('.','_')
[Environment]::SetEnvironmentVariable($x, $env:CUDA_PATH)
if (!(Test-Path '.\BuildArtifacts\')) { mkdir '.\BuildArtifacts' }
cmake -S . -B "./build_$cudaVersion_1" -G "Visual Studio 17 2022" -T "cuda=$cudaVersion" -D "NO_CUBLASLT=1" -D "CUDA_TARGET_ARCH_FEATURE_LEVEL=$cudaVersion" -D "CIBUILD=1"
cmake --build "./build_$cudaVersion_1" --target libbitsandbytes_cuda --config Release
- uses: actions/upload-artifact@v3
with:
name: compiled-binaries
path: ./BuildArtifacts/*
compile_cuda_old_conda:
# Uses Windows-2019 and Cuda Toolkit 11.3 - 11.5 with full version spec as string: "11.5.2"
# See https://github.com/Jimver/cuda-toolkit/blob/master/src/links/windows-links.ts for supported versions
name: Compile Cuda Code 2019-Conda
runs-on: windows-2019
strategy:
matrix:
cuda: ["11.3.1", "11.4.4", "11.5.2"]
cublas: ["0", "1"]
defaults:
run:
shell: pwsh
env:
CUDAVER: ${{ matrix.cuda }}
steps:
- name: Get Visual Studio Integration
uses: Jimver/cuda-toolkit@v0.2.10
with:
cuda: ${{ matrix.cuda }}
method: 'network'
sub-packages: '["visual_studio_integration"]'
- name: Install Visual Studio Integration
run: |
$x = (dir $env:CUDA_PATH -dir -recurse -depth 2).where({$_.name -eq 'visual_studio_integration'}).fullname
$y = (dir $x -dir -recurse).where({$_.name -eq 'MSBuildExtensions'}).fullname + '\*'
(gi 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\*\BuildCustomizations').fullname.foreach({cp $y $_})
- uses: actions/checkout@v3
with:
repository: 'jllllll/bitsandbytes'
ref: 'cmake_windows'
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Setup Mamba
uses: conda-incubator/setup-miniconda@v2.2.0
with:
activate-environment: "build"
python-version: "3.10"
miniforge-variant: Mambaforge
miniforge-version: latest
use-mamba: true
add-pip-as-python-dependency: true
auto-activate-base: false
- name: Install Dependencies
run: |
$cudaVersion = $env:CUDAVER
$cudaChannels = ''
$cudaNum = [int]$cudaVersion.substring($cudaVersion.LastIndexOf('.')+1)
while ($cudaNum -ge 0) { $cudaChannels += '-c nvidia/label/cuda-' + $cudaVersion.Remove($cudaVersion.LastIndexOf('.')+1) + $cudaNum + ' '; $cudaNum-- }
$cudaChannels = $cudaChannels.TrimEnd() + ' -c conda-forge -c defaults'
mamba install -y 'cmake' 'ninja' 'cuda' $cudaChannels.Split()
- name: Compile Cuda Code
if: matrix.cublas == '0'
run: |
$env:CUDA_PATH = $env:CONDA_PREFIX
$cudaVersion = $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.'))
$x = 'CUDA_PATH_V' + $cudaVersion.Replace('.','_')
[Environment]::SetEnvironmentVariable($x, $env:CUDA_PATH)
if (!(Test-Path '.\BuildArtifacts\')) { mkdir '.\BuildArtifacts' }
cmake -S . -B "./build_$cudaVersion_0" -G "Visual Studio 16 2019" -T "cuda=$cudaVersion" -D "NO_CUBLASLT=0" -D "CUDA_TARGET_ARCH_FEATURE_LEVEL=$cudaVersion" -D "CIBUILD=1"
cmake --build "./build_$cudaVersion_0" --target libbitsandbytes_cuda --config Release
- name: Compile Cuda Code nocublaslt
if: matrix.cublas == '1'
run: |
$env:CUDA_PATH = $env:CONDA_PREFIX
$cudaVersion = $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.'))
$x = 'CUDA_PATH_V' + $cudaVersion.Replace('.','_')
[Environment]::SetEnvironmentVariable($x, $env:CUDA_PATH)
if (!(Test-Path '.\BuildArtifacts\')) { mkdir '.\BuildArtifacts' }
cmake -S . -B "./build_$cudaVersion_1" -G "Visual Studio 16 2019" -T "cuda=$cudaVersion" -D "NO_CUBLASLT=1" -D "CUDA_TARGET_ARCH_FEATURE_LEVEL=$cudaVersion" -D "CIBUILD=1"
cmake --build "./build_$cudaVersion_1" --target libbitsandbytes_cuda --config Release
- uses: actions/upload-artifact@v3
with:
name: compiled-binaries
path: ./BuildArtifacts/*
compile_cuda_old:
# Uses Windows-2019 and Cuda Toolkit <= 11.2 with full version spec as string: "11.2.2"
# These versions of the Toolkit are not available through conda and must be installed through Jimver/cuda-toolkit (slower for newer versions, but these are fine)
# See https://github.com/Jimver/cuda-toolkit/blob/master/src/links/windows-links.ts for supported versions
name: Compile Cuda Code 2019
runs-on: windows-2019
strategy:
matrix:
cuda: ["11.1.1", "11.2.2"]
cublas: ["0", "1"]
defaults:
run:
shell: pwsh
env:
CUDAVER: ${{ matrix.cuda }}
steps:
- name: Install Cuda Toolkit
uses: Jimver/cuda-toolkit@v0.2.10
with:
cuda: ${{ matrix.cuda }}
method: 'local'
- name: Install Visual Studio Integration
run: |
$x = (dir $env:CUDA_PATH -dir -recurse -depth 2).where({$_.name -eq 'visual_studio_integration'}).fullname
$y = (dir $x -dir -recurse).where({$_.name -eq 'MSBuildExtensions'}).fullname + '\*'
(gi 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\*\BuildCustomizations').fullname.foreach({cp $y $_})
- uses: actions/checkout@v3
with:
repository: 'jllllll/bitsandbytes'
ref: 'cmake_windows'
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Setup Mamba
uses: conda-incubator/setup-miniconda@v2.2.0
with:
activate-environment: "build"
python-version: "3.10"
miniforge-variant: Mambaforge
miniforge-version: latest
use-mamba: true
add-pip-as-python-dependency: true
auto-activate-base: false
- name: Install Dependencies
run: mamba install -y 'cmake' 'ninja' -c 'conda-forge' -c 'defaults'
- name: Compile Cuda Code
if: matrix.cublas == '0'
run: |
$cudaVersion = $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.'))
if (!(Test-Path '.\BuildArtifacts\')) { mkdir '.\BuildArtifacts' }
cmake -S . -B "./build_$cudaVersion_0" -G "Visual Studio 16 2019" -T "cuda=$cudaVersion" -D "NO_CUBLASLT=0" -D "CUDA_TARGET_ARCH_FEATURE_LEVEL=$cudaVersion" -D "CIBUILD=1"
cmake --build "./build_$cudaVersion_0" --target libbitsandbytes_cuda --config Release
- name: Compile Cuda Code nocublaslt
if: matrix.cublas == '1'
run: |
$cudaVersion = $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.'))
if (!(Test-Path '.\BuildArtifacts\')) { mkdir '.\BuildArtifacts' }
cmake -S . -B "./build_$cudaVersion_1" -G "Visual Studio 16 2019" -T "cuda=$cudaVersion" -D "NO_CUBLASLT=1" -D "CUDA_TARGET_ARCH_FEATURE_LEVEL=$cudaVersion" -D "CIBUILD=1"
cmake --build "./build_$cudaVersion_1" --target libbitsandbytes_cuda --config Release
- uses: actions/upload-artifact@v3
with:
name: compiled-binaries
path: ./BuildArtifacts/*
build_wheel:
name: Build Wheel
needs: [compile_cuda_new, compile_cuda_old_conda, compile_cuda_old]
runs-on: windows-latest
defaults:
run:
shell: pwsh
steps:
- uses: actions/checkout@v3
with:
repository: 'jllllll/bitsandbytes'
ref: 'cmake_windows'
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- uses: actions/download-artifact@v3
with:
name: compiled-binaries
path: ./bitsandbytes
- name: Build Wheel
run: |
python -m pip install build wheel
python -m build -n --wheel -C--global-option=--plat-name=win_amd64
- uses: actions/upload-artifact@v3
with:
name: wheel
path: ./dist/*.whl
- name: Upload files to a GitHub release
uses: svenstaro/upload-release-action@2.6.1
with:
file: ./dist/*.whl
tag: wheels
file_glob: true
overwrite: true