Skip to content

Commit 5abcf51

Browse files
committed
Adding workflow compilation options for platforms without AVX instructions or AVXVNNI instruction can be achieved by setting the releasetag parameter above to Basic/AVXVNNI.
Signed-off-by: JamePeng <jame_peng@sina.com>
1 parent 3d96053 commit 5abcf51

File tree

6 files changed

+153
-17
lines changed

6 files changed

+153
-17
lines changed
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
name: Build Wheels (CU124-126) for Windows(Basic)
2+
3+
on:
4+
workflow_dispatch:
5+
6+
permissions:
7+
contents: write
8+
9+
jobs:
10+
build_wheels:
11+
name: Build Wheel ${{ matrix.os }} ${{ matrix.pyver }} ${{ matrix.cuda }} ${{ matrix.releasetag }}
12+
runs-on: ${{ matrix.os }}
13+
strategy:
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: ["Basic"]
19+
cudaarch: ["all"]
20+
defaults:
21+
run:
22+
shell: pwsh
23+
env:
24+
CUDAVER: ${{ matrix.cuda }}
25+
AVXVER: ${{ matrix.releasetag }}
26+
CUDAARCHVER: ${{ matrix.cudaarch }}
27+
# https://cmake.org/cmake/help/latest/prop_tgt/CUDA_ARCHITECTURES.html
28+
# https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/#gpu-feature-list
29+
# e.g. "all" "89" "90" "100" "120"
30+
MAX_JOBS: 8
31+
32+
steps:
33+
- name: Add MSBuild to PATH
34+
if: runner.os == 'Windows'
35+
uses: microsoft/setup-msbuild@v2
36+
with:
37+
msbuild-architecture: x64
38+
39+
- uses: actions/checkout@v5
40+
with:
41+
submodules: "recursive"
42+
43+
# from kingbri1/flash-attention build-wheels.yml
44+
- name: Install CUDA ${{ matrix.cuda }}
45+
uses: N-Storm/cuda-toolkit@v0.2.28
46+
id: cuda-toolkit
47+
with:
48+
cuda: "${{ matrix.cuda }}"
49+
use-github-cache: false
50+
51+
# from astral-sh/setup-uv
52+
- name: Install the latest version of uv and set the python version
53+
uses: astral-sh/setup-uv@v6
54+
with:
55+
python-version: ${{ matrix.pyver }}
56+
activate-environment: true
57+
enable-cache: true
58+
59+
- name: Install Dependencies
60+
run: |
61+
git config --system core.longpaths true
62+
uv pip install --upgrade build setuptools wheel packaging
63+
64+
- name: Build Wheel(Basic)
65+
run: |
66+
$cudaVersion = $env:CUDAVER.Remove($env:CUDAVER.LastIndexOf('.')).Replace('.','')
67+
$env:CUDA_HOME = $env:CUDA_PATH
68+
$env:CUDA_TOOLKIT_ROOT_DIR = $env:CUDA_PATH
69+
$env:VERBOSE = '1'
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+
74+
# if ($env:AVXVER -eq 'AVX') {
75+
# $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX2=off -DGGML_FMA=off -DGGML_F16C=off'
76+
# }
77+
# if ($env:AVXVER -eq 'AVX2') {
78+
# $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX2=on -DGGML_FMA=off -DGGML_F16C=off'
79+
# }
80+
# if ($env:AVXVER -eq 'AVX512') {
81+
# $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX512=on'
82+
# }
83+
# Basic options for compiling without AVX instructions
84+
if ($env:AVXVER -eq 'Basic') {
85+
$env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX=off -DGGML_AVX2=off -DGGML_AVX512=off -DGGML_FMA=off -DGGML_F16C=off'
86+
}
87+
python -m build --wheel
88+
89+
# Check if wheel was built
90+
if (!(Test-Path '.\dist\*.whl')) {
91+
Write-Error "No wheel built in dist/ directory"
92+
exit 1
93+
}
94+
95+
# write the build tag to the output
96+
Write-Output "CUDA_VERSION=$cudaVersion" >> $env:GITHUB_ENV
97+
98+
$wheel = (gi '.\dist\*.whl')[0]
99+
$tagVer = $wheel.name.split('-')[1]
100+
Write-Output "TAG_VERSION=$tagVer" >> $env:GITHUB_ENV
101+
102+
- name: Get Current Date
103+
id: get-date
104+
run: |
105+
$currentDate = Get-Date -UFormat "%Y%m%d"
106+
Write-Output "BUILD_DATE=$currentDate" >> $env:GITHUB_ENV
107+
108+
- name: Create Release
109+
if: always() && env.TAG_VERSION != ''
110+
uses: softprops/action-gh-release@v2
111+
with:
112+
files: dist/*
113+
# Set tag_name to <tag>-cu<cuda_version>-<date>-win
114+
tag_name: v${{ env.TAG_VERSION }}-cu${{ env.CUDA_VERSION }}-${{ env.AVXVER }}-win-${{ env.BUILD_DATE }}
115+
env:
116+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,16 @@ jobs:
7777
if ($env:AVXVER -eq 'AVX2') {
7878
$env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX2=on -DGGML_FMA=off -DGGML_F16C=off'
7979
}
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-
# }
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+
}
8383
# if ($env:AVXVER -eq 'AVX512') {
8484
# $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX512=on'
8585
# }
86+
# Basic options for compiling without AVX instructions
87+
if ($env:AVXVER -eq 'Basic') {
88+
$env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX=off -DGGML_AVX2=off -DGGML_AVX512=off -DGGML_FMA=off -DGGML_F16C=off'
89+
}
8690
python -m build --wheel
8791
8892
# Check if wheel was built
@@ -93,7 +97,7 @@ jobs:
9397
9498
# write the build tag to the output
9599
Write-Output "CUDA_VERSION=$cudaVersion" >> $env:GITHUB_ENV
96-
100+
97101
$wheel = (gi '.\dist\*.whl')[0]
98102
$tagVer = $wheel.name.split('-')[1]
99103
Write-Output "TAG_VERSION=$tagVer" >> $env:GITHUB_ENV

.github/workflows/build-wheels-cu124-linux.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,16 @@ jobs:
7171
if [ "${AVXVER}" = "AVX2" ]; then
7272
CMAKE_ARGS="${CMAKE_ARGS} -DGGML_AVX2=on -DGGML_FMA=off -DGGML_F16C=off"
7373
fi
74+
if [ "${AVXVER}" = "AVXVNNI" ]; then
75+
CMAKE_ARGS="${CMAKE_ARGS} -DGGML_AVX2=on -DGGML_AVX_VNNI=on -DGGML_FMA=on -DGGML_F16C=off"
76+
fi
7477
# if [ "${AVXVER}" = "AVX512" ]; then
7578
# CMAKE_ARGS="${CMAKE_ARGS} -DGGML_AVX512=on"
7679
# fi
77-
# if [ "${AVXVER}" = "basic" ]; then
78-
# CMAKE_ARGS = "${CMAKE_ARGS} -DGGML_AVX=off -DGGML_AVX2=off -DGGML_FMA=off -DGGML_F16C=off"
79-
# fi
80+
# Basic options for compiling without AVX instructions
81+
if [ "${AVXVER}" = "Basic" ]; then
82+
CMAKE_ARGS = "${CMAKE_ARGS} -DGGML_AVX=off -DGGML_AVX2=off -DGGML_AVX512=off -DGGML_FMA=off -DGGML_F16C=off"
83+
fi
8084
8185
# Export CMAKE_ARGS environment variable so the python -m build command can use it
8286
echo ${CMAKE_ARGS}

.github/workflows/build-wheels-cu126-linux.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,16 @@ jobs:
7171
if [ "${AVXVER}" = "AVX2" ]; then
7272
CMAKE_ARGS="${CMAKE_ARGS} -DGGML_AVX2=on -DGGML_FMA=off -DGGML_F16C=off"
7373
fi
74+
if [ "${AVXVER}" = "AVXVNNI" ]; then
75+
CMAKE_ARGS="${CMAKE_ARGS} -DGGML_AVX2=on -DGGML_AVX_VNNI=on -DGGML_FMA=on -DGGML_F16C=off"
76+
fi
7477
# if [ "${AVXVER}" = "AVX512" ]; then
7578
# CMAKE_ARGS="${CMAKE_ARGS} -DGGML_AVX512=on"
7679
# fi
77-
# if [ "${AVXVER}" = "basic" ]; then
78-
# CMAKE_ARGS = "${CMAKE_ARGS} -DGGML_AVX=off -DGGML_AVX2=off -DGGML_FMA=off -DGGML_F16C=off"
79-
# fi
80+
# Basic options for compiling without AVX instructions
81+
if [ "${AVXVER}" = "Basic" ]; then
82+
CMAKE_ARGS = "${CMAKE_ARGS} -DGGML_AVX=off -DGGML_AVX2=off -DGGML_AVX512=off -DGGML_FMA=off -DGGML_F16C=off"
83+
fi
8084
8185
# Export CMAKE_ARGS environment variable so the python -m build command can use it
8286
echo ${CMAKE_ARGS}

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,16 @@ jobs:
7171
if [ "${AVXVER}" = "AVX2" ]; then
7272
CMAKE_ARGS="${CMAKE_ARGS} -DGGML_AVX2=on -DGGML_FMA=off -DGGML_F16C=off"
7373
fi
74+
if [ "${AVXVER}" = "AVXVNNI" ]; then
75+
CMAKE_ARGS="${CMAKE_ARGS} -DGGML_AVX2=on -DGGML_AVX_VNNI=on -DGGML_FMA=on -DGGML_F16C=off"
76+
fi
7477
# if [ "${AVXVER}" = "AVX512" ]; then
7578
# CMAKE_ARGS="${CMAKE_ARGS} -DGGML_AVX512=on"
7679
# fi
77-
# if [ "${AVXVER}" = "basic" ]; then
78-
# CMAKE_ARGS = "${CMAKE_ARGS} -DGGML_AVX=off -DGGML_AVX2=off -DGGML_FMA=off -DGGML_F16C=off"
79-
# fi
80+
# Basic options for compiling without AVX instructions
81+
if [ "${AVXVER}" = "Basic" ]; then
82+
CMAKE_ARGS = "${CMAKE_ARGS} -DGGML_AVX=off -DGGML_AVX2=off -DGGML_AVX512=off -DGGML_FMA=off -DGGML_F16C=off"
83+
fi
8084
8185
# Export CMAKE_ARGS environment variable so the python -m build command can use it
8286
echo ${CMAKE_ARGS}

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,16 @@ jobs:
7777
if ($env:AVXVER -eq 'AVX2') {
7878
$env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX2=on -DGGML_FMA=off -DGGML_F16C=off'
7979
}
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-
# }
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+
}
8383
# if ($env:AVXVER -eq 'AVX512') {
8484
# $env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX512=on'
8585
# }
86+
# Basic options for compiling without AVX instructions
87+
if ($env:AVXVER -eq 'Basic') {
88+
$env:CMAKE_ARGS = $env:CMAKE_ARGS + ' -DGGML_AVX=off -DGGML_AVX2=off -DGGML_AVX512=off -DGGML_FMA=off -DGGML_F16C=off'
89+
}
8690
python -m build --wheel
8791
8892
# Check if wheel was built
@@ -93,7 +97,7 @@ jobs:
9397
9498
# write the build tag to the output
9599
Write-Output "CUDA_VERSION=$cudaVersion" >> $env:GITHUB_ENV
96-
100+
97101
$wheel = (gi '.\dist\*.whl')[0]
98102
$tagVer = $wheel.name.split('-')[1]
99103
Write-Output "TAG_VERSION=$tagVer" >> $env:GITHUB_ENV

0 commit comments

Comments
 (0)