12
12
- master
13
13
paths : ['.github/workflows/**', '**/CMakeLists.txt', '**/Makefile', '**/*.h', '**/*.c', '**/*.cpp']
14
14
pull_request :
15
- types : [opened, synchronize, edited, reopened, review_requested, ready_for_review ]
15
+ types : [opened, synchronize, reopened]
16
16
paths : ['**/CMakeLists.txt', '**/Makefile', '**/*.h', '**/*.c', '**/*.cpp']
17
17
18
18
env :
19
19
BRANCH_NAME : ${{ github.head_ref || github.ref_name }}
20
20
21
21
jobs :
22
- ubuntu-latest-make :
23
- if : github.event.pull_request.draft == false
24
-
25
- runs-on : ubuntu-latest
22
+ ubuntu-focal-make :
23
+ runs-on : ubuntu-20.04
26
24
27
25
steps :
28
26
- name : Clone
@@ -33,16 +31,14 @@ jobs:
33
31
id : depends
34
32
run : |
35
33
sudo apt-get update
36
- sudo apt-get install build-essential
34
+ sudo apt-get install build-essential gcc-8
37
35
38
36
- name : Build
39
37
id : make_build
40
38
run : |
41
- make
39
+ CC=gcc-8 make
42
40
43
41
ubuntu-latest-cmake :
44
- if : github.event.pull_request.draft == false
45
-
46
42
runs-on : ubuntu-latest
47
43
48
44
steps :
71
67
ctest --verbose
72
68
73
69
ubuntu-latest-cmake-sanitizer :
74
- if : github.event.pull_request.draft == false
75
-
76
70
runs-on : ubuntu-latest
77
71
78
72
continue-on-error : true
@@ -108,8 +102,6 @@ jobs:
108
102
ctest --verbose
109
103
110
104
macOS-latest-make :
111
- if : github.event.pull_request.draft == false
112
-
113
105
runs-on : macos-latest
114
106
115
107
steps :
@@ -128,9 +120,7 @@ jobs:
128
120
make
129
121
130
122
macOS-latest-cmake :
131
- if : github.event.pull_request.draft == false
132
-
133
- runs-on : macOS-latest
123
+ runs-on : macos-latest
134
124
135
125
steps :
136
126
- name : Clone
@@ -157,32 +147,87 @@ jobs:
157
147
ctest --verbose
158
148
159
149
windows-latest-cmake :
160
- if : github.event.pull_request.draft == false
161
-
162
150
runs-on : windows-latest
151
+ env :
152
+ OPENBLAS_VERSION : 0.3.23
153
+ OPENCL_VERSION : 2023.04.17
154
+ CLBLAST_VERSION : 1.5.3
163
155
164
156
strategy :
165
157
matrix :
166
158
include :
167
- - build : ' avx2'
168
- defines : ' '
169
- - build : ' avx'
170
- defines : ' -DLLAMA_AVX2=OFF'
171
- - build : ' avx512'
172
- defines : ' -DLLAMA_AVX512=ON'
159
+ - build : ' avx2'
160
+ defines : ' '
161
+ - build : ' avx'
162
+ defines : ' -DLLAMA_AVX2=OFF'
163
+ - build : ' avx512'
164
+ defines : ' -DLLAMA_AVX512=ON -DBUILD_SHARED_LIBS=ON'
165
+ - build : ' clblast'
166
+ defines : ' -DLLAMA_CLBLAST=ON -DCMAKE_PREFIX_PATH="$env:RUNNER_TEMP/clblast"'
167
+ - build : ' openblas'
168
+ defines : ' -DLLAMA_OPENBLAS=ON -DBLAS_LIBRARIES="/LIBPATH:$env:RUNNER_TEMP/openblas/lib" -DOPENBLAS_INC="$env:RUNNER_TEMP/openblas/include"'
173
169
174
170
steps :
175
171
- name : Clone
176
172
id : checkout
177
173
uses : actions/checkout@v1
178
174
175
+ - name : Download OpenCL SDK
176
+ id : get_opencl
177
+ if : ${{ matrix.build == 'clblast' }}
178
+ run : |
179
+ curl.exe -o $env:RUNNER_TEMP/opencl.zip -L "https://github.com/KhronosGroup/OpenCL-SDK/releases/download/v${env:OPENCL_VERSION}/OpenCL-SDK-v${env:OPENCL_VERSION}-Win-x64.zip"
180
+ mkdir $env:RUNNER_TEMP/opencl
181
+ tar.exe -xvf $env:RUNNER_TEMP/opencl.zip --strip-components=1 -C $env:RUNNER_TEMP/opencl
182
+
183
+ - name : Download CLBlast
184
+ id : get_clblast
185
+ if : ${{ matrix.build == 'clblast' }}
186
+ run : |
187
+ curl.exe -o $env:RUNNER_TEMP/clblast.zip -L "https://github.com/CNugteren/CLBlast/releases/download/${env:CLBLAST_VERSION}/CLBlast-${env:CLBLAST_VERSION}-Windows-x64.zip"
188
+ curl.exe -o $env:RUNNER_TEMP/CLBlast.LICENSE.txt -L "https://github.com/CNugteren/CLBlast/raw/${env:CLBLAST_VERSION}/LICENSE"
189
+ mkdir $env:RUNNER_TEMP/clblast
190
+ tar.exe -xvf $env:RUNNER_TEMP/clblast.zip -C $env:RUNNER_TEMP/clblast
191
+ foreach ($f in (gci -Recurse -Path "$env:RUNNER_TEMP/clblast" -Filter '*.cmake')) {
192
+ $txt = Get-Content -Path $f -Raw
193
+ $txt.Replace('C:/dependencies/opencl/', "$($env:RUNNER_TEMP.Replace('\','/'))/opencl/") | Set-Content -Path $f -Encoding UTF8
194
+ }
195
+
196
+ - name : Download OpenBLAS
197
+ id : get_openblas
198
+ if : ${{ matrix.build == 'openblas' }}
199
+ run : |
200
+ curl.exe -o $env:RUNNER_TEMP/openblas.zip -L "https://github.com/xianyi/OpenBLAS/releases/download/v${env:OPENBLAS_VERSION}/OpenBLAS-${env:OPENBLAS_VERSION}-x64.zip"
201
+ curl.exe -o $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt -L "https://github.com/xianyi/OpenBLAS/raw/v${env:OPENBLAS_VERSION}/LICENSE"
202
+ mkdir $env:RUNNER_TEMP/openblas
203
+ tar.exe -xvf $env:RUNNER_TEMP/openblas.zip -C $env:RUNNER_TEMP/openblas
204
+ $vcdir = $(vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath)
205
+ $msvc = $(join-path $vcdir $('VC\Tools\MSVC\'+$(gc -raw $(join-path $vcdir 'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt')).Trim()))
206
+ $lib = $(join-path $msvc 'bin\Hostx64\x64\lib.exe')
207
+ & $lib /machine:x64 "/def:${env:RUNNER_TEMP}/openblas/lib/libopenblas.def" "/out:${env:RUNNER_TEMP}/openblas/lib/openblas.lib" /name:openblas.dll
208
+
179
209
- name : Build
180
210
id : cmake_build
181
211
run : |
182
212
mkdir build
183
213
cd build
184
214
cmake .. ${{ matrix.defines }}
185
215
cmake --build . --config Release
216
+ cp ../LICENSE ./bin/Release/llama.cpp.txt
217
+
218
+ - name : Add clblast.dll
219
+ id : add_clblast_dll
220
+ if : ${{ matrix.build == 'clblast' }}
221
+ run : |
222
+ cp $env:RUNNER_TEMP/clblast/lib/clblast.dll ./build/bin/Release
223
+ cp $env:RUNNER_TEMP/CLBlast.LICENSE.txt ./build/bin/Release/CLBlast-${env:CLBLAST_VERSION}.txt
224
+
225
+ - name : Add libopenblas.dll
226
+ id : add_libopenblas_dll
227
+ if : ${{ matrix.build == 'openblas' }}
228
+ run : |
229
+ cp $env:RUNNER_TEMP/openblas/bin/libopenblas.dll ./build/bin/Release/openblas.dll
230
+ cp $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt ./build/bin/Release/OpenBLAS-${env:OPENBLAS_VERSION}.txt
186
231
187
232
- name : Check AVX512F support
188
233
id : check_avx512f
@@ -199,7 +244,7 @@ jobs:
199
244
200
245
- name : Test
201
246
id : cmake_test
202
- if : ${{ matrix.build != 'avx512' || env.HAS_AVX512F == '1' }} # Test AVX-512 only when possible
247
+ if : ${{ matrix.build != 'clblast' && (matrix.build != ' avx512' || env.HAS_AVX512F == '1') }} # Test AVX-512 only when possible
203
248
run : |
204
249
cd build
205
250
ctest -C Release --verbose
@@ -222,17 +267,94 @@ jobs:
222
267
path : |
223
268
llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-${{ matrix.build }}-x64.zip
224
269
270
+ windows-latest-cmake-cublas :
271
+ runs-on : windows-latest
272
+
273
+ strategy :
274
+ matrix :
275
+ cuda : ['12.1.0', '11.7.1']
276
+ build : ['cublas']
277
+
278
+ steps :
279
+ - name : Clone
280
+ id : checkout
281
+ uses : actions/checkout@v1
282
+
283
+
284
+ id : cuda-toolkit
285
+ with :
286
+ cuda : ${{ matrix.cuda }}
287
+ # TODO(green-sky): _dev seems to fail, and non dev are not enought
288
+ # sub-packages: '["nvcc", "cudart", "cublas", "cudart_dev", "cublas_dev"]'
289
+
290
+ - name : Build
291
+ id : cmake_build
292
+ run : |
293
+ mkdir build
294
+ cd build
295
+ cmake .. -DLLAMA_CUBLAS=ON
296
+ cmake --build . --config Release
297
+
298
+ - name : Get commit hash
299
+ id : commit
300
+ if : ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
301
+ uses : pr-mpt/actions-commit-hash@v2
302
+
303
+ - name : Pack artifacts
304
+ id : pack_artifacts
305
+ if : ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
306
+ run : |
307
+ 7z a llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-${{ matrix.build }}-cu${{ matrix.cuda }}-x64.zip .\build\bin\Release\*
308
+
309
+ - name : Upload artifacts
310
+ if : ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
311
+ uses : actions/upload-artifact@v3
312
+ with :
313
+ path : |
314
+ llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-${{ matrix.build }}-cu${{ matrix.cuda }}-x64.zip
315
+
316
+ - name : Copy and pack Cuda runtime
317
+ if : ${{ matrix.cuda == '12.1.0' }}
318
+ # TODO(green-sky): paths are cuda 12 specific
319
+ run : |
320
+ echo "Cuda install location: ${{steps.cuda-toolkit.outputs.CUDA_PATH}}"
321
+ mkdir '.\build\bin\cudart\'
322
+ cp "${{steps.cuda-toolkit.outputs.CUDA_PATH}}\bin\cudart64_12.dll" '.\build\bin\cudart\'
323
+ cp "${{steps.cuda-toolkit.outputs.CUDA_PATH}}\bin\cublas64_12.dll" '.\build\bin\cudart\'
324
+ cp "${{steps.cuda-toolkit.outputs.CUDA_PATH}}\bin\cublasLt64_12.dll" '.\build\bin\cudart\'
325
+ 7z a cudart-llama-bin-win-cu${{ matrix.cuda }}-x64.zip .\build\bin\cudart\*
326
+
327
+ - name : Copy and pack Cuda runtime
328
+ if : ${{ matrix.cuda == '11.7.1' }}
329
+ # TODO(green-sky): paths are cuda 11 specific
330
+ run : |
331
+ echo "Cuda install location: ${{steps.cuda-toolkit.outputs.CUDA_PATH}}"
332
+ mkdir '.\build\bin\cudart\'
333
+ ls "${{steps.cuda-toolkit.outputs.CUDA_PATH}}\bin"
334
+ cp "${{steps.cuda-toolkit.outputs.CUDA_PATH}}\bin\cudart64_110.dll" '.\build\bin\cudart\'
335
+ cp "${{steps.cuda-toolkit.outputs.CUDA_PATH}}\bin\cublas64_11.dll" '.\build\bin\cudart\'
336
+ cp "${{steps.cuda-toolkit.outputs.CUDA_PATH}}\bin\cublasLt64_11.dll" '.\build\bin\cudart\'
337
+ 7z a cudart-llama-bin-win-cu${{ matrix.cuda }}-x64.zip .\build\bin\cudart\*
338
+
339
+ - name : Upload Cuda runtime
340
+ if : ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
341
+ uses : actions/upload-artifact@v3
342
+ with :
343
+ path : |
344
+ cudart-llama-bin-win-cu${{ matrix.cuda }}-x64.zip
345
+
225
346
release :
226
347
if : ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
227
348
228
349
runs-on : ubuntu-latest
229
350
230
351
needs :
231
- - ubuntu-latest -make
352
+ - ubuntu-focal -make
232
353
- ubuntu-latest-cmake
233
354
- macOS-latest-make
234
355
- macOS-latest-cmake
235
356
- windows-latest-cmake
357
+ - windows-latest-cmake-cublas
236
358
237
359
steps :
238
360
- name : Download artifacts
0 commit comments