Skip to content

Commit c008d9e

Browse files
committed
Optimize Windows CUDA Wheel Build Workflow
Signed-off-by: JamePeng <jame_peng@sina.com>
1 parent 670c642 commit c008d9e

File tree

2 files changed

+54
-86
lines changed

2 files changed

+54
-86
lines changed

.github/workflows/build-wheels-cu124-cu126-win.yml

Lines changed: 27 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,16 @@ permissions:
77
contents: write
88

99
jobs:
10-
define_matrix:
11-
name: Define Build Matrix
12-
runs-on: windows-2022
13-
outputs:
14-
matrix: ${{ steps.set-matrix.outputs.matrix }}
15-
defaults:
16-
run:
17-
shell: pwsh
18-
19-
steps:
20-
- name: Define Job Output
21-
id: set-matrix
22-
run: |
23-
$matrix = @{
24-
'os' = @('windows-2022')
25-
'pyver' = @("3.10", "3.11", "3.12", "3.13")
26-
'cuda' = @("12.4.1","12.6.3")
27-
'releasetag' = @("AVX2")
28-
'cudaarch' = @("all")
29-
}
30-
31-
$matrixOut = ConvertTo-Json $matrix -Compress
32-
Write-Output ('matrix=' + $matrixOut) >> $env:GITHUB_OUTPUT
33-
3410
build_wheels:
35-
name: Build Wheel ${{ matrix.os }} ${{ matrix.pyver }} ${{ matrix.cuda }} ${{ matrix.releasetag == 'wheels' && 'AVX2' || matrix.releasetag }}
36-
needs: define_matrix
11+
name: Build Wheel ${{ matrix.os }} ${{ matrix.pyver }} ${{ matrix.cuda }} ${{ matrix.releasetag }}
3712
runs-on: ${{ matrix.os }}
3813
strategy:
39-
matrix: ${{ fromJSON(needs.define_matrix.outputs.matrix) }}
14+
matrix:
15+
os: ['windows-2022']
16+
pyver: ["3.10", "3.11", "3.12", "3.13"]
17+
cuda: ["12.4.1","12.6.3"]
18+
releasetag: ["AVX2"]
19+
cudaarch: ["all"]
4020
defaults:
4121
run:
4222
shell: pwsh
@@ -46,7 +26,8 @@ jobs:
4626
CUDAARCHVER: ${{ matrix.cudaarch }}
4727
# https://cmake.org/cmake/help/latest/prop_tgt/CUDA_ARCHITECTURES.html
4828
# https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/#gpu-feature-list
49-
# e.g. "all" "89"
29+
# e.g. "all" "89" "90" "100" "120"
30+
MAX_JOBS: 8
5031

5132
steps:
5233
- name: Add MSBuild to PATH
@@ -55,7 +36,7 @@ jobs:
5536
with:
5637
msbuild-architecture: x64
5738

58-
- uses: actions/checkout@v4
39+
- uses: actions/checkout@v5
5940
with:
6041
submodules: "recursive"
6142

@@ -82,33 +63,34 @@ jobs:
8263
8364
- name: Build Wheel
8465
run: |
85-
# $cupath = 'CUDA_PATH_V' + $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.')).Replace('.','_')
86-
# echo "$cupath=$env:CONDA_PREFIX" >> $env:GITHUB_ENV
87-
8866
$cudaVersion = $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.')).Replace('.','')
89-
# $env:CUDA_PATH = $env:CONDA_PREFIX
9067
$env:CUDA_HOME = $env:CUDA_PATH
9168
$env:CUDA_TOOLKIT_ROOT_DIR = $env:CUDA_PATH
92-
if ($IsLinux) {
93-
$env:LD_LIBRARY_PATH = $env:CONDA_PREFIX + '/lib:' + $env:LD_LIBRARY_PATH
94-
}
9569
$env:VERBOSE = '1'
96-
$env:CMAKE_ARGS = '-DGGML_CUDA=on -DCMAKE_CUDA_ARCHITECTURES=' + $env:CUDAARCHVER
97-
$env:CMAKE_ARGS = "-DGGML_CUDA_FORCE_MMQ=ON $env:CMAKE_ARGS"
98-
$env:CMAKE_ARGS = "-DLLAMA_CURL=OFF $env:CMAKE_ARGS"
70+
$env:CMAKE_ARGS = '-DGGML_CUDA=on -DCMAKE_CUDA_ARCHITECTURES=' + $env:CUDAARCHVER + ' -DCMAKE_BUILD_PARALLEL_LEVEL=' + $env:MAX_JOBS
71+
$env:CMAKE_ARGS = "-DGGML_CUDA_FORCE_MMQ=on -DCUDA_SEPARABLE_COMPILATION=on $env:CMAKE_ARGS"
72+
$env:CMAKE_ARGS = "-DENABLE_CCACHE=on -DLLAMA_CURL=off $env:CMAKE_ARGS"
73+
9974
if ($env:AVXVER -eq 'AVX') {
10075
$env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX2=off -DGGML_FMA=off -DGGML_F16C=off'
10176
}
10277
if ($env:AVXVER -eq 'AVX2') {
10378
$env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX2=on -DGGML_FMA=off -DGGML_F16C=off'
10479
}
80+
# if ($env:AVXVER -eq 'AVXVNNI') {
81+
# $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX2=on -DGGML_AVX_VNNI=on -DGGML_FMA=on -DGGML_F16C=off'
82+
# }
10583
# if ($env:AVXVER -eq 'AVX512') {
10684
# $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX512=on'
10785
# }
108-
# if ($env:AVXVER -eq 'basic') {
109-
# $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX=off -DGGML_AVX2=off -DGGML_FMA=off -DGGML_F16C=off'
110-
# }
11186
python -m build --wheel
87+
88+
# Check if wheel was built
89+
if (!(Test-Path '.\dist\*.whl')) {
90+
Write-Error "No wheel built in dist/ directory"
91+
exit 1
92+
}
93+
11294
# write the build tag to the output
11395
Write-Output "CUDA_VERSION=$cudaVersion" >> $env:GITHUB_ENV
11496
@@ -122,7 +104,9 @@ jobs:
122104
$currentDate = Get-Date -UFormat "%Y%m%d"
123105
Write-Output "BUILD_DATE=$currentDate" >> $env:GITHUB_ENV
124106
125-
- uses: softprops/action-gh-release@v2.2.2
107+
- name: Create Release
108+
if: always() && env.TAG_VERSION != ''
109+
uses: softprops/action-gh-release@v2
126110
with:
127111
files: dist/*
128112
# Set tag_name to <tag>-cu<cuda_version>-<date>-win

.github/workflows/build-wheels-cu128-win.yml

Lines changed: 27 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,16 @@ permissions:
77
contents: write
88

99
jobs:
10-
define_matrix:
11-
name: Define Build Matrix
12-
runs-on: windows-2022
13-
outputs:
14-
matrix: ${{ steps.set-matrix.outputs.matrix }}
15-
defaults:
16-
run:
17-
shell: pwsh
18-
19-
steps:
20-
- name: Define Job Output
21-
id: set-matrix
22-
run: |
23-
$matrix = @{
24-
'os' = @('windows-2022')
25-
'pyver' = @("3.10", "3.11", "3.12", "3.13")
26-
'cuda' = @("12.8.1")
27-
'releasetag' = @("AVX2")
28-
'cudaarch' = @("75-real;80-real;86-real;87-real;89-real;90-real;100-real;101-real;120-real")
29-
}
30-
31-
$matrixOut = ConvertTo-Json $matrix -Compress
32-
Write-Output ('matrix=' + $matrixOut) >> $env:GITHUB_OUTPUT
33-
3410
build_wheels:
35-
name: Build Wheel ${{ matrix.os }} ${{ matrix.pyver }} ${{ matrix.cuda }} ${{ matrix.releasetag == 'wheels' && 'AVX2' || matrix.releasetag }}
36-
needs: define_matrix
11+
name: Build Wheel ${{ matrix.os }} ${{ matrix.pyver }} ${{ matrix.cuda }} ${{ matrix.releasetag }}
3712
runs-on: ${{ matrix.os }}
3813
strategy:
39-
matrix: ${{ fromJSON(needs.define_matrix.outputs.matrix) }}
14+
matrix:
15+
os: ['windows-2022']
16+
pyver: ["3.10", "3.11", "3.12", "3.13"]
17+
cuda: ["12.8.1"]
18+
releasetag: ["AVX2"]
19+
cudaarch: ["75-real;80-real;86-real;87-real;89-real;90-real;100-real;101-real;120-real"]
4020
defaults:
4121
run:
4222
shell: pwsh
@@ -46,7 +26,8 @@ jobs:
4626
CUDAARCHVER: ${{ matrix.cudaarch }}
4727
# https://cmake.org/cmake/help/latest/prop_tgt/CUDA_ARCHITECTURES.html
4828
# https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/#gpu-feature-list
49-
# e.g. "all" "89"
29+
# e.g. "all" "89" "90" "100" "120"
30+
MAX_JOBS: 8
5031

5132
steps:
5233
- name: Add MSBuild to PATH
@@ -55,7 +36,7 @@ jobs:
5536
with:
5637
msbuild-architecture: x64
5738

58-
- uses: actions/checkout@v4
39+
- uses: actions/checkout@v5
5940
with:
6041
submodules: "recursive"
6142

@@ -82,33 +63,34 @@ jobs:
8263
8364
- name: Build Wheel
8465
run: |
85-
# $cupath = 'CUDA_PATH_V' + $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.')).Replace('.','_')
86-
# echo "$cupath=$env:CONDA_PREFIX" >> $env:GITHUB_ENV
87-
8866
$cudaVersion = $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.')).Replace('.','')
89-
# $env:CUDA_PATH = $env:CONDA_PREFIX
9067
$env:CUDA_HOME = $env:CUDA_PATH
9168
$env:CUDA_TOOLKIT_ROOT_DIR = $env:CUDA_PATH
92-
if ($IsLinux) {
93-
$env:LD_LIBRARY_PATH = $env:CONDA_PREFIX + '/lib:' + $env:LD_LIBRARY_PATH
94-
}
9569
$env:VERBOSE = '1'
96-
$env:CMAKE_ARGS = '-DGGML_CUDA=on -DCMAKE_CUDA_ARCHITECTURES=' + $env:CUDAARCHVER
97-
$env:CMAKE_ARGS = "-DGGML_CUDA_FORCE_MMQ=ON $env:CMAKE_ARGS"
98-
$env:CMAKE_ARGS = "-DLLAMA_CURL=OFF $env:CMAKE_ARGS"
70+
$env:CMAKE_ARGS = '-DGGML_CUDA=on -DCMAKE_CUDA_ARCHITECTURES=' + $env:CUDAARCHVER + ' -DCMAKE_BUILD_PARALLEL_LEVEL=' + $env:MAX_JOBS
71+
$env:CMAKE_ARGS = "-DGGML_CUDA_FORCE_MMQ=on -DCUDA_SEPARABLE_COMPILATION=on $env:CMAKE_ARGS"
72+
$env:CMAKE_ARGS = "-DENABLE_CCACHE=on -DLLAMA_CURL=off $env:CMAKE_ARGS"
73+
9974
if ($env:AVXVER -eq 'AVX') {
10075
$env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX2=off -DGGML_FMA=off -DGGML_F16C=off'
10176
}
10277
if ($env:AVXVER -eq 'AVX2') {
10378
$env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX2=on -DGGML_FMA=off -DGGML_F16C=off'
10479
}
80+
# if ($env:AVXVER -eq 'AVXVNNI') {
81+
# $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX2=on -DGGML_AVX_VNNI=on -DGGML_FMA=on -DGGML_F16C=off'
82+
# }
10583
# if ($env:AVXVER -eq 'AVX512') {
10684
# $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX512=on'
10785
# }
108-
# if ($env:AVXVER -eq 'basic') {
109-
# $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX=off -DGGML_AVX2=off -DGGML_FMA=off -DGGML_F16C=off'
110-
# }
11186
python -m build --wheel
87+
88+
# Check if wheel was built
89+
if (!(Test-Path '.\dist\*.whl')) {
90+
Write-Error "No wheel built in dist/ directory"
91+
exit 1
92+
}
93+
11294
# write the build tag to the output
11395
Write-Output "CUDA_VERSION=$cudaVersion" >> $env:GITHUB_ENV
11496
@@ -122,7 +104,9 @@ jobs:
122104
$currentDate = Get-Date -UFormat "%Y%m%d"
123105
Write-Output "BUILD_DATE=$currentDate" >> $env:GITHUB_ENV
124106
125-
- uses: softprops/action-gh-release@v2.2.2
107+
- name: Create Release
108+
if: always() && env.TAG_VERSION != ''
109+
uses: softprops/action-gh-release@v2
126110
with:
127111
files: dist/*
128112
# Set tag_name to <tag>-cu<cuda_version>-<date>-win

0 commit comments

Comments
 (0)