diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml new file mode 100644 index 000000000..c4064acca --- /dev/null +++ b/.github/workflows/compile.yml @@ -0,0 +1,232 @@ +name: Update Binaries + +on: + workflow_dispatch: + inputs: + cublas: + type: boolean + description: Build CUBLAS binaries + macos: + type: boolean + description: Build MacOS binaries + push: + branches: [cron_job] + #schedule: + # - cron: "22 22 * * 2" + +jobs: + compile-linux: + name: Compile (Linux) + strategy: + fail-fast: true + matrix: + include: + - build: 'noavx' + defines: '-DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_SERVER=OFF -DLLAMA_AVX=OFF -DLLAMA_AVX2=OFF -DLLAMA_FMA=OFF -DBUILD_SHARED_LIBS=ON' + - build: 'avx2' + defines: '-DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_SERVER=OFF -DBUILD_SHARED_LIBS=ON' + - build: 'avx' + defines: '-DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_SERVER=OFF -DLLAMA_AVX2=OFF -DBUILD_SHARED_LIBS=ON' + - build: 'avx512' + defines: '-DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_SERVER=OFF -DLLAMA_AVX512=ON -DBUILD_SHARED_LIBS=ON' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + repository: ggerganov/llama.cpp + - name: Build + id: cmake_build + run: | + mkdir build + cd build + cmake .. ${{ matrix.defines }} + cmake --build . --config Release + - uses: actions/upload-artifact@v3 + with: + path: ./build/libllama.so + name: llama-bin-linux-${{ matrix.build }}-x64.so + + compile-windows: + name: Compile (Windows) + strategy: + fail-fast: true + matrix: + include: + - build: 'noavx' + defines: '-DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_SERVER=OFF -DLLAMA_AVX=OFF -DLLAMA_AVX2=OFF -DLLAMA_FMA=OFF -DBUILD_SHARED_LIBS=ON' + - build: 'avx2' + defines: '-DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_SERVER=OFF -DBUILD_SHARED_LIBS=ON' + - build: 'avx' + defines: '-DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_SERVER=OFF -DLLAMA_AVX2=OFF -DBUILD_SHARED_LIBS=ON' + - build: 'avx512' + defines: '-DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_SERVER=OFF -DLLAMA_AVX512=ON -DBUILD_SHARED_LIBS=ON' + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + with: + repository: ggerganov/llama.cpp + + - name: Build + id: cmake_build + run: | + mkdir build + cd build + cmake .. ${{ matrix.defines }} + cmake --build . --config Release + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + path: .\build\bin\Release\llama.dll + name: llama-bin-win-${{ matrix.build }}-x64.dll + + compile-windows-cublas: + if: ${{ github.event.inputs.cublas }} + name: Compile (cublas) + runs-on: windows-latest + strategy: + matrix: + cuda: ['12.1.0', '11.7.1'] + steps: + - name: Clone + id: checkout + uses: actions/checkout@v3 + with: + repository: ggerganov/llama.cpp + + - uses: Jimver/cuda-toolkit@v0.2.10 + id: cuda-toolkit + with: + cuda: ${{ matrix.cuda }} + + - name: Build + id: cmake_build + run: | + mkdir build + cd build + cmake .. -DLLAMA_CUBLAS=ON -DBUILD_SHARED_LIBS=ON + cmake --build . --config Release + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + path: .\build\bin\Release\llama.dll + name: llama-bin-win-cublas-cu${{ matrix.cuda }}-x64.dll + + compile-macos: + if: ${{ github.event.inputs.macos }} + name: Compile (MacOS) + runs-on: macos-latest + strategy: + fail-fast: true + matrix: + include: + - build: 'arm64' + arch: 'arm64' + - build: 'x86_64' + arch: 'x86_64' + + steps: + - uses: actions/checkout@v3 + with: + repository: ggerganov/llama.cpp + + - name: Dependencies + continue-on-error: true + run: | + brew update + + - name: Build + id: cmake_build + run: | + mkdir build + cd build + cmake -DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_SERVER=OFF -DLLAMA_AVX2=OFF -DLLAMA_FMA=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} .. + cmake --build . --config Release + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + path: ./build/libllama.dylib + name: llama-bin-macos-${{ matrix.arch }}.dylib + + build-deps: + runs-on: ubuntu-latest + name: "Gather Binaries" + if: ${{ always() }} + needs: [ + "compile-linux", + "compile-macos", + "compile-windows", + "compile-windows-cublas" + ] + steps: + - uses: actions/download-artifact@v3 + with: + path: artifacts + + - name: Rearrange Files + run: | + ls -R + + mkdir deps + + mkdir deps/linux + mkdir deps/linux/noavx + cp artifacts/llama-bin-linux-noavx-x64.so/libllama.so deps/linux/noavx/libllama.so + mkdir deps/linux/avx + cp artifacts/llama-bin-linux-avx-x64.so/libllama.so deps/linux/avx/libllama.so + mkdir deps/linux/avx2 + cp artifacts/llama-bin-linux-avx2-x64.so/libllama.so deps/linux/avx2/libllama.so + mkdir deps/linux/avx512 + cp artifacts/llama-bin-linux-avx512-x64.so/libllama.so deps/linux/avx512/libllama.so + + mkdir deps/win + mkdir deps/win/noavx + cp artifacts/llama-bin-win-noavx-x64.dll/llama.dll deps/win/noavx/libllama.dll + mkdir deps/win/avx + cp artifacts/llama-bin-win-avx-x64.dll/llama.dll deps/win/avx/libllama.dll + mkdir deps/win/avx2 + cp artifacts/llama-bin-win-avx2-x64.dll/llama.dll deps/win/avx2/libllama.dll + mkdir deps/win/avx512 + cp artifacts/llama-bin-win-avx512-x64.dll/llama.dll deps/win/avx512/libllama.dll + + - name: Rearrange MacOS files + if: ${{ github.event.inputs.macos }} + run: | + mkdir deps/macos-arm64 + mkdir deps/macos-x86_64 + cp artifacts/llama-bin-macos-arm64.dylib/libllama.dylib deps/macos-arm64/libllama.dylib + cp artifacts/llama-bin-macos-x86_64.dylib/libllama.dylib deps/macos-x86_64/libllama.dylib + + - name: Rearrange CUDA files + if: ${{ github.event.inputs.cublas }} + run: | + mkdir deps/win/cu12.1.0 + mkdir deps/win/cu11.7.1 + cp artifacts/llama-bin-win-cublas-cu11.7.1-x64.dll/llama.dll cu11.7.1/libllama.dll + cp artifacts/llama-bin-win-cublas-cu12.1.0-x64.dll/llama.dll cu12.1.0/libllama.dll + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + path: deps/ + name: deps + - name: Upload artifacts (CUDA12) + if: ${{ github.event.inputs.cublas }} + uses: actions/upload-artifact@v3 + with: + path: cu12.1.0/ + name: cu12.1.0 + - name: Upload artifacts (CUDA11) + if: ${{ github.event.inputs.cublas }} + uses: actions/upload-artifact@v3 + with: + path: cu11.7.1/ + name: cu11.7.1 + + - name: Remove Artifacts + uses: geekyeggo/delete-artifact@v2 + with: + name: | + llama-*