|
|
@@ -64,6 +64,38 @@ jobs:
|
|
|
cd build
|
|
|
ctest --output-on-failure
|
|
|
|
|
|
+ ubuntu-latest-cmake-sanitizer:
|
|
|
+ runs-on: ubuntu-latest
|
|
|
+
|
|
|
+ strategy:
|
|
|
+ matrix:
|
|
|
+ sanitizer: [ADDRESS, THREAD, UNDEFINED]
|
|
|
+
|
|
|
+ steps:
|
|
|
+ - name: Clone
|
|
|
+ id: checkout
|
|
|
+ uses: actions/checkout@v1
|
|
|
+
|
|
|
+ - name: Dependencies
|
|
|
+ id: depends
|
|
|
+ run: |
|
|
|
+ sudo apt-get update
|
|
|
+ sudo apt-get install build-essential
|
|
|
+
|
|
|
+ - name: Build
|
|
|
+ id: cmake_build
|
|
|
+ run: |
|
|
|
+ mkdir build
|
|
|
+ cd build
|
|
|
+ cmake .. -DLLAMA_SANITIZE_${{ matrix.sanitizer }}=ON
|
|
|
+ cmake --build . --config Release
|
|
|
+
|
|
|
+ - name: Test
|
|
|
+ id: cmake_test
|
|
|
+ run: |
|
|
|
+ cd build
|
|
|
+ ctest --output-on-failure
|
|
|
+
|
|
|
macOS-latest-make:
|
|
|
runs-on: macos-latest
|
|
|
|
|
|
@@ -112,6 +144,16 @@ jobs:
|
|
|
windows-latest-cmake:
|
|
|
runs-on: windows-latest
|
|
|
|
|
|
+ strategy:
|
|
|
+ matrix:
|
|
|
+ include:
|
|
|
+ - build: 'avx2'
|
|
|
+ defines: ''
|
|
|
+ - build: 'avx'
|
|
|
+ defines: '-DLLAMA_AVX2=OFF'
|
|
|
+ - build: 'avx512'
|
|
|
+ defines: '-DLLAMA_AVX512=ON'
|
|
|
+
|
|
|
steps:
|
|
|
- name: Clone
|
|
|
id: checkout
|
|
|
@@ -122,11 +164,21 @@ jobs:
|
|
|
run: |
|
|
|
mkdir build
|
|
|
cd build
|
|
|
- cmake ..
|
|
|
+ cmake .. ${{ matrix.defines }}
|
|
|
cmake --build . --config Release
|
|
|
|
|
|
+ - name: Check AVX512F support
|
|
|
+ id: check_avx512f
|
|
|
+ if: ${{ matrix.build == 'avx512' }}
|
|
|
+ continue-on-error: true
|
|
|
+ run: |
|
|
|
+ cd build
|
|
|
+ Set-Content -Path .\avx512f.exe -Value ([Convert]::FromBase64String('TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAAClmfXY4fibi+H4m4vh+JuL4fiai+P4m4si98aL4vibi7Xbq4vg+JuLUmljaOH4m4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQRQAATAEBAGo6H2QAAAAAAAAAAOAADwELAQYAAAIAAAAAAAAAAAAADBAAAAAQAAAAIAAAAABAAAAQAAAAAgAABAAAAAAAAAAEAAAAAAAAAAAgAAAAAgAAAAAAAAMAAAAAABAAABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAFQQAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAAsgAAAAAQAAAAAgAAAAIAAAAAAAAAAAAAAAAAACAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUEAAAiBAAAAAAAABVi+xRUVNTuAcAAAAPosHrEGaD4wGJXfxbg0X8MI1F+GoAUI1F/GoBUGr1/xUAEEAAUP8VBBBAAItF/FuDwND32BvAQMnDzMx8EAAAAAAAAAAAAACkEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlBAAAIgQAAAAAAAApANXcml0ZUZpbGUAuQFHZXRTdGRIYW5kbGUAAEtFUk5FTDMyLmRsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==')) -AsByteStream
|
|
|
+ .\avx512f.exe && echo " AVX512F: YES" && ( echo HAS_AVX512F=1 >> $env:GITHUB_ENV ) || echo " AVX512F: NO"
|
|
|
+
|
|
|
- name: Test
|
|
|
id: cmake_test
|
|
|
+ if: ${{ matrix.build != 'avx512' || env.HAS_AVX512F == '1' }} # Test AVX-512 only when possible
|
|
|
run: |
|
|
|
cd build
|
|
|
ctest -C Release --output-on-failure
|
|
|
@@ -140,12 +192,39 @@ jobs:
|
|
|
id: pack_artifacts
|
|
|
if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
|
|
|
run: |
|
|
|
- 7z a llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-x64.zip .\build\bin\Release\*
|
|
|
+ 7z a llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-${{ matrix.build }}-x64.zip .\build\bin\Release\*
|
|
|
+
|
|
|
+ - name: Upload artifacts
|
|
|
+ if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
|
|
|
+ uses: actions/upload-artifact@v3
|
|
|
+ with:
|
|
|
+ path: |
|
|
|
+ llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-${{ matrix.build }}-x64.zip
|
|
|
+
|
|
|
+ release:
|
|
|
+ if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
|
|
|
+
|
|
|
+ runs-on: ubuntu-latest
|
|
|
+
|
|
|
+ needs:
|
|
|
+ - ubuntu-latest-make
|
|
|
+ - ubuntu-latest-cmake
|
|
|
+ - macOS-latest-make
|
|
|
+ - macOS-latest-cmake
|
|
|
+ - windows-latest-cmake
|
|
|
+
|
|
|
+ steps:
|
|
|
+ - name: Download artifacts
|
|
|
+ id: download-artifact
|
|
|
+ uses: actions/download-artifact@v3
|
|
|
+
|
|
|
+ - name: Get commit hash
|
|
|
+ id: commit
|
|
|
+ uses: pr-mpt/actions-commit-hash@v2
|
|
|
|
|
|
- name: Create release
|
|
|
id: create_release
|
|
|
- if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
|
|
|
- uses: zendesk/action-create-release@v1
|
|
|
+ uses: anzz1/action-create-release@v1
|
|
|
env:
|
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
with:
|
|
|
@@ -153,15 +232,25 @@ jobs:
|
|
|
|
|
|
- name: Upload release
|
|
|
id: upload_release
|
|
|
- if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
|
|
|
- uses: actions/upload-release-asset@v1
|
|
|
- env:
|
|
|
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
+ uses: actions/github-script@v3
|
|
|
with:
|
|
|
- upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
|
- asset_path: .\llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-x64.zip
|
|
|
- asset_name: llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-x64.zip
|
|
|
- asset_content_type: application/octet-stream
|
|
|
+ github-token: ${{secrets.GITHUB_TOKEN}}
|
|
|
+ script: |
|
|
|
+ const path = require('path');
|
|
|
+ const fs = require('fs');
|
|
|
+ const release_id = '${{ steps.create_release.outputs.id }}';
|
|
|
+ for (let file of await fs.readdirSync('./artifact')) {
|
|
|
+ if (path.extname(file) === '.zip') {
|
|
|
+ console.log('uploadReleaseAsset', file);
|
|
|
+ await github.repos.uploadReleaseAsset({
|
|
|
+ owner: context.repo.owner,
|
|
|
+ repo: context.repo.repo,
|
|
|
+ release_id: release_id,
|
|
|
+ name: file,
|
|
|
+ data: await fs.readFileSync(`./artifact/${file}`)
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
# ubuntu-latest-gcc:
|
|
|
# runs-on: ubuntu-latest
|