diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index faf796c82..ccddd65bc 100644 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -51,12 +51,12 @@ jobs: - uses: actions/upload-artifact@v4 with: path: ./build/libllama.so - name: llama-bin-linux-${{ matrix.build }}-x64.so + name: llama-bin-linux-${{ matrix.build }}-x64 - name: Upload Llava uses: actions/upload-artifact@v4 with: path: ./build/examples/llava/libllava_shared.so - name: llava-bin-linux-${{ matrix.build }}-x64.so + name: llava-bin-linux-${{ matrix.build }}-x64 compile-windows: name: Compile (Windows) @@ -92,13 +92,13 @@ jobs: uses: actions/upload-artifact@v4 with: path: .\build\bin\Release\llama.dll - name: llama-bin-win-${{ matrix.build }}-x64.dll + name: llama-bin-win-${{ matrix.build }}-x64 - name: Upload Llava uses: actions/upload-artifact@v4 with: path: .\build\bin\Release\llava_shared.dll - name: llava-bin-win-${{ matrix.build }}-x64.dll + name: llava-bin-win-${{ matrix.build }}-x64 compile-clblast: name: Compile (clblast) - ${{ matrix.os }} @@ -175,14 +175,14 @@ jobs: path: | .\build\bin\Release\llama.dll .\build\bin\Release\clblast.dll - name: llama-bin-win-clblast-x64.dll + name: llama-bin-win-clblast-x64 - name: Upload llava artifacts (Windows) if: ${{ matrix.os == 'windows-latest' }} uses: actions/upload-artifact@v4 with: path: | .\build\bin\Release\llava_shared.dll - name: llava-bin-win-clblast-x64.dll + name: llava-bin-win-clblast-x64 - name: Upload artifacts (linux) if: ${{ matrix.os == 'ubuntu-22.04' }} uses: actions/upload-artifact@v4 @@ -190,14 +190,14 @@ jobs: path: | ./build/libllama.so # ./build/libclblast.so - name: llama-bin-linux-clblast-x64.so + name: llama-bin-linux-clblast-x64 - name: Upload llava artifacts (linux) if: ${{ matrix.os == 'ubuntu-22.04' }} uses: actions/upload-artifact@v4 with: path: | ./build/examples/llava/libllava_shared.so - name: llava-bin-linux-clblast-x64.so + name: llava-bin-linux-clblast-x64 compile-cublas: @@ -247,25 +247,25 @@ jobs: uses: actions/upload-artifact@v4 with: path: .\build\bin\Release\llama.dll - name: llama-bin-win-cublas-cu${{ matrix.cuda }}-x64.dll + name: llama-bin-win-cublas-cu${{ matrix.cuda }}-x64 - name: Upload llava artifacts (Windows) if: ${{ matrix.os == 'windows-latest' }} uses: actions/upload-artifact@v4 with: path: .\build\bin\Release\llava_shared.dll - name: llava-bin-win-cublas-cu${{ matrix.cuda }}-x64.dll + name: llava-bin-win-cublas-cu${{ matrix.cuda }}-x64 - name: Upload artifacts (Linux) if: ${{ matrix.os == 'ubuntu-20.04' }} uses: actions/upload-artifact@v4 with: path: ./build/libllama.so - name: llama-bin-linux-cublas-cu${{ matrix.cuda }}-x64.so + name: llama-bin-linux-cublas-cu${{ matrix.cuda }}-x64 - name: Upload llava artifacts (Linux) if: ${{ matrix.os == 'ubuntu-20.04' }} uses: actions/upload-artifact@v4 with: path: ./build/examples/llava/libllava_shared.so - name: llava-bin-linux-cublas-cu${{ matrix.cuda }}-x64.so + name: llava-bin-linux-cublas-cu${{ matrix.cuda }}-x64 compile-macos: @@ -300,18 +300,63 @@ jobs: uses: actions/upload-artifact@v4 with: path: ./build/libllama.dylib - name: llama-bin-osx-${{ matrix.build }}.dylib + name: llama-bin-osx-${{ matrix.build }} - name: Upload Llava uses: actions/upload-artifact@v4 with: path: ./build/examples/llava/libllava_shared.dylib - name: llava-bin-osx-${{ matrix.build }}.dylib + name: llava-bin-osx-${{ matrix.build }} - name: Upload Metal if: ${{ matrix.build != 'x64' }} uses: actions/upload-artifact@v4 with: path: ./build/bin/ggml-metal.metal - name: ggml-metal.metal + name: ggml-metal + + compile-android: + name: Compile (Android) + strategy: + fail-fast: true + matrix: + include: + - build: 'x86' + defines: '-DANDROID_ABI=x86' + - build: 'x86_64' + defines: '-DANDROID_ABI=x86_64' + - build: 'arm64-v8a' + defines: '-DANDROID_ABI=arm64-v8a' + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v4 + with: + repository: ggerganov/llama.cpp + fetch-depth: 0 + ref: '${{ github.event.inputs.llama_cpp_commit }}' + - uses: nttld/setup-ndk@v1 + id: setup-ndk + with: + ndk-version: r26d + add-to-path: false + - name: Build + id: cmake_build + env: + CMAKE_FLAGS: '-DCMAKE_TOOLCHAIN_FILE=${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-23' + run: | + mkdir build + cd build + cmake .. ${{ env.COMMON_DEFINE }} ${{ env.CMAKE_FLAGS }} ${{ matrix.defines }} + cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS} + - name: Upload Llama + uses: actions/upload-artifact@v4 + with: + path: ./build/libllama.so + name: llama-bin-android-${{ matrix.build }} + - name: Upload Llava + uses: actions/upload-artifact@v4 + with: + path: ./build/examples/llava/libllava_shared.so + name: llava-bin-android-${{ matrix.build }} + build-deps: runs-on: ubuntu-latest @@ -321,6 +366,7 @@ jobs: "compile-linux", "compile-macos", "compile-windows", + "compile-android", "compile-cublas", "compile-clblast" ] @@ -333,57 +379,65 @@ jobs: - name: Rearrange Files run: | # Make all directories at once - mkdir --parents deps/{avx,avx2,avx512,osx-arm64,osx-x64,cu11.7.1,cu12.1.0,clblast} + mkdir --parents deps/{avx,avx2,avx512,osx-arm64,osx-x64,android-x86,android-x86_64,android-arm64-v8a,cu11.7.1,cu12.1.0,clblast} - cp artifacts/llama-bin-linux-noavx-x64.so/libllama.so deps/libllama.so - cp artifacts/llama-bin-linux-avx-x64.so/libllama.so deps/avx/libllama.so - cp artifacts/llama-bin-linux-avx2-x64.so/libllama.so deps/avx2/libllama.so - cp artifacts/llama-bin-linux-avx512-x64.so/libllama.so deps/avx512/libllama.so + cp artifacts/llama-bin-linux-noavx-x64/libllama.so deps/libllama.so + cp artifacts/llama-bin-linux-avx-x64/libllama.so deps/avx/libllama.so + cp artifacts/llama-bin-linux-avx2-x64/libllama.so deps/avx2/libllama.so + cp artifacts/llama-bin-linux-avx512-x64/libllama.so deps/avx512/libllama.so - cp artifacts/llama-bin-win-noavx-x64.dll/llama.dll deps/llama.dll - cp artifacts/llama-bin-win-avx-x64.dll/llama.dll deps/avx/llama.dll - cp artifacts/llama-bin-win-avx2-x64.dll/llama.dll deps/avx2/llama.dll - cp artifacts/llama-bin-win-avx512-x64.dll/llama.dll deps/avx512/llama.dll + cp artifacts/llama-bin-win-noavx-x64/llama.dll deps/llama.dll + cp artifacts/llama-bin-win-avx-x64/llama.dll deps/avx/llama.dll + cp artifacts/llama-bin-win-avx2-x64/llama.dll deps/avx2/llama.dll + cp artifacts/llama-bin-win-avx512-x64/llama.dll deps/avx512/llama.dll - cp artifacts/llava-bin-linux-noavx-x64.so/libllava_shared.so deps/libllava_shared.so - cp artifacts/llava-bin-linux-avx-x64.so/libllava_shared.so deps/avx/libllava_shared.so - cp artifacts/llava-bin-linux-avx2-x64.so/libllava_shared.so deps/avx2/libllava_shared.so - cp artifacts/llava-bin-linux-avx512-x64.so/libllava_shared.so deps/avx512/libllava_shared.so + cp artifacts/llava-bin-linux-noavx-x64/libllava_shared.so deps/libllava_shared.so + cp artifacts/llava-bin-linux-avx-x64/libllava_shared.so deps/avx/libllava_shared.so + cp artifacts/llava-bin-linux-avx2-x64/libllava_shared.so deps/avx2/libllava_shared.so + cp artifacts/llava-bin-linux-avx512-x64/libllava_shared.so deps/avx512/libllava_shared.so - cp artifacts/llama-bin-win-noavx-x64.dll/llama.dll deps/libllama.dll - cp artifacts/llama-bin-win-avx-x64.dll/llama.dll deps/avx/libllama.dll - cp artifacts/llama-bin-win-avx2-x64.dll/llama.dll deps/avx2/libllama.dll - cp artifacts/llama-bin-win-avx512-x64.dll/llama.dll deps/avx512/libllama.dll + cp artifacts/llama-bin-win-noavx-x64/llama.dll deps/libllama.dll + cp artifacts/llama-bin-win-avx-x64/llama.dll deps/avx/libllama.dll + cp artifacts/llama-bin-win-avx2-x64/llama.dll deps/avx2/libllama.dll + cp artifacts/llama-bin-win-avx512-x64/llama.dll deps/avx512/libllama.dll - cp artifacts/llava-bin-win-noavx-x64.dll/llava_shared.dll deps/llava_shared.dll - cp artifacts/llava-bin-win-avx-x64.dll/llava_shared.dll deps/avx/llava_shared.dll - cp artifacts/llava-bin-win-avx2-x64.dll/llava_shared.dll deps/avx2/llava_shared.dll - cp artifacts/llava-bin-win-avx512-x64.dll/llava_shared.dll deps/avx512/llava_shared.dll + cp artifacts/llava-bin-win-noavx-x64/llava_shared.dll deps/llava_shared.dll + cp artifacts/llava-bin-win-avx-x64/llava_shared.dll deps/avx/llava_shared.dll + cp artifacts/llava-bin-win-avx2-x64/llava_shared.dll deps/avx2/llava_shared.dll + cp artifacts/llava-bin-win-avx512-x64/llava_shared.dll deps/avx512/llava_shared.dll - cp artifacts/llama-bin-osx-arm64.dylib/libllama.dylib deps/osx-arm64/libllama.dylib - cp artifacts/llava-bin-osx-arm64.dylib/libllava_shared.dylib deps/osx-arm64/libllava_shared.dylib - cp artifacts/ggml-metal.metal/ggml-metal.metal deps/osx-arm64/ggml-metal.metal - cp artifacts/llama-bin-osx-x64.dylib/libllama.dylib deps/osx-x64/libllama.dylib - cp artifacts/llava-bin-osx-x64.dylib/libllava_shared.dylib deps/osx-x64/libllava_shared.dylib + cp artifacts/llama-bin-osx-arm64/libllama.dylib deps/osx-arm64/libllama.dylib + cp artifacts/llava-bin-osx-arm64/libllava_shared.dylib deps/osx-arm64/libllava_shared.dylib + cp artifacts/ggml-metal/ggml-metal.metal deps/osx-arm64/ggml-metal.metal + cp artifacts/llama-bin-osx-x64/libllama.dylib deps/osx-x64/libllama.dylib + cp artifacts/llava-bin-osx-x64/libllava_shared.dylib deps/osx-x64/libllava_shared.dylib - cp artifacts/llama-bin-win-cublas-cu11.7.1-x64.dll/llama.dll deps/cu11.7.1/llama.dll - cp artifacts/llava-bin-win-cublas-cu11.7.1-x64.dll/llava_shared.dll deps/cu11.7.1/llava_shared.dll + cp artifacts/llama-bin-win-cublas-cu11.7.1-x64/llama.dll deps/cu11.7.1/llama.dll + cp artifacts/llava-bin-win-cublas-cu11.7.1-x64/llava_shared.dll deps/cu11.7.1/llava_shared.dll - cp artifacts/llama-bin-linux-cublas-cu11.7.1-x64.so/libllama.so deps/cu11.7.1/libllama.so - cp artifacts/llava-bin-linux-cublas-cu11.7.1-x64.so/libllava_shared.so deps/cu11.7.1/libllava_shared.so + cp artifacts/llama-bin-linux-cublas-cu11.7.1-x64/libllama.so deps/cu11.7.1/libllama.so + cp artifacts/llava-bin-linux-cublas-cu11.7.1-x64/libllava_shared.so deps/cu11.7.1/libllava_shared.so - cp artifacts/llama-bin-win-cublas-cu12.1.0-x64.dll/llama.dll deps/cu12.1.0/llama.dll - cp artifacts/llava-bin-win-cublas-cu12.1.0-x64.dll/llava_shared.dll deps/cu12.1.0/llava_shared.dll + cp artifacts/llama-bin-win-cublas-cu12.1.0-x64/llama.dll deps/cu12.1.0/llama.dll + cp artifacts/llava-bin-win-cublas-cu12.1.0-x64/llava_shared.dll deps/cu12.1.0/llava_shared.dll - cp artifacts/llama-bin-linux-cublas-cu12.1.0-x64.so/libllama.so deps/cu12.1.0/libllama.so - cp artifacts/llava-bin-linux-cublas-cu12.1.0-x64.so/libllava_shared.so deps/cu12.1.0/libllava_shared.so + cp artifacts/llama-bin-linux-cublas-cu12.1.0-x64/libllama.so deps/cu12.1.0/libllama.so + cp artifacts/llava-bin-linux-cublas-cu12.1.0-x64/libllava_shared.so deps/cu12.1.0/libllava_shared.so - cp artifacts/llama-bin-win-clblast-x64.dll/{llama,clblast}.dll deps/clblast/ - cp artifacts/llava-bin-win-clblast-x64.dll/llava_shared.dll deps/clblast/llava_shared.dll - cp artifacts/llama-bin-linux-clblast-x64.so/libllama.so deps/clblast/ - cp artifacts/llava-bin-linux-clblast-x64.so/libllava_shared.so deps/clblast/libllava_shared.so + cp artifacts/llama-bin-win-clblast-x64/{llama,clblast}.dll deps/clblast/ + cp artifacts/llava-bin-win-clblast-x64/llava_shared.dll deps/clblast/llava_shared.dll + cp artifacts/llama-bin-linux-clblast-x64/libllama.so deps/clblast/ + cp artifacts/llava-bin-linux-clblast-x64/libllava_shared.so deps/clblast/libllava_shared.so + + cp artifacts/llama-bin-android-x86/libllama.so deps/android-x86/libllama.so + cp artifacts/llava-bin-android-x86/libllava_shared.so deps/android-x86/libllava_shared.so + cp artifacts/llama-bin-android-x86_64/libllama.so deps/android-x86_64/libllama.so + cp artifacts/llava-bin-android-x86_64/libllava_shared.so deps/android-x86_64/libllava_shared.so + + cp artifacts/llama-bin-android-arm64-v8a/libllama.so deps/android-arm64-v8a/libllama.so + cp artifacts/llava-bin-android-arm64-v8a/libllava_shared.so deps/android-arm64-v8a/libllava_shared.so - name: Upload artifacts uses: actions/upload-artifact@v4 diff --git a/LLama/LLamaSharp.Runtime.targets b/LLama/LLamaSharp.Runtime.targets index fa7a018c1..764d772bc 100644 --- a/LLama/LLamaSharp.Runtime.targets +++ b/LLama/LLamaSharp.Runtime.targets @@ -2,133 +2,17 @@ true - - - PreserveNewest - runtimes/win-x64/native/noavx/llama.dll - - - PreserveNewest - runtimes/win-x64/native/avx/llama.dll - - - PreserveNewest - runtimes/win-x64/native/avx2/llama.dll - - - PreserveNewest - runtimes/win-x64/native/avx512/llama.dll - - - PreserveNewest - runtimes/win-x64/native/cuda11/llama.dll - - - PreserveNewest - runtimes/win-x64/native/cuda12/llama.dll - + + + libllama.so + arm64-v8a + - - PreserveNewest - runtimes/linux-x64/native/noavx/libllama.so - - - PreserveNewest - runtimes/linux-x64/native/avx/libllama.so - - - PreserveNewest - runtimes/linux-x64/native/avx2/libllama.so - - - PreserveNewest - runtimes/linux-x64/native/avx512/libllama.so - - - PreserveNewest - runtimes/linux-x64/native/cuda11/libllama.so - - - PreserveNewest - runtimes/linux-x64/native/cuda12/libllama.so - - - - PreserveNewest - runtimes/osx-arm64/native/libllama.dylib - - - PreserveNewest - runtimes/osx-arm64/native/ggml-metal.metal - - - - PreserveNewest - runtimes/osx-x64/native/libllama.dylib - - - - PreserveNewest - runtimes/win-x64/native/noavx/llava_shared.dll - - - PreserveNewest - runtimes/win-x64/native/avx/llava_shared.dll - - - PreserveNewest - runtimes/win-x64/native/avx2/llava_shared.dll - - - PreserveNewest - runtimes/win-x64/native/avx512/llava_shared.dll - - - PreserveNewest - runtimes/win-x64/native/cuda11/llava_shared.dll - - - PreserveNewest - runtimes/win-x64/native/cuda12/llava_shared.dll - - - - - PreserveNewest - runtimes/linux-x64/native/noavx/libllava_shared.so - - - PreserveNewest - runtimes/linux-x64/native/avx/libllava_shared.so - - - PreserveNewest - runtimes/linux-x64/native/avx2/libllava_shared.so - - - PreserveNewest - runtimes/linux-x64/native/avx512/libllava_shared.so - - - PreserveNewest - runtimes/linux-x64/native/cuda11/libllava_shared.so - - - PreserveNewest - runtimes/linux-x64/native/cuda12/libllava_shared.so - - - - PreserveNewest - runtimes/osx-arm64/native/libllava_shared.dylib - - - - PreserveNewest - runtimes/osx-x64/native/libllava_shared.dylib - - - + + libllava_shared.so + arm64-v8a + + \ No newline at end of file diff --git a/LLama/Native/NativeApi.Load.cs b/LLama/Native/NativeApi.Load.cs index f1bd765e4..7c32c41ed 100644 --- a/LLama/Native/NativeApi.Load.cs +++ b/LLama/Native/NativeApi.Load.cs @@ -1,4 +1,4 @@ -using LLama.Exceptions; +using LLama.Exceptions; using System; using System.IO; using System.Runtime.InteropServices; @@ -57,6 +57,11 @@ private static void SetDllImportResolver() // NativeLibrary is not available on older runtimes. We'll have to depend on // the normal runtime dll resolution there. #if NET5_0_OR_GREATER + + // We don't need special dll resolution on Android + if (OperatingSystem.IsAndroid()) + return; + NativeLibrary.SetDllImportResolver(typeof(NativeApi).Assembly, (name, _, _) => { if (name == "llama") diff --git a/LLama/runtimes/build/LLamaSharp.Backend.Android.nuspec b/LLama/runtimes/build/LLamaSharp.Backend.Android.nuspec new file mode 100644 index 000000000..1e77784f1 --- /dev/null +++ b/LLama/runtimes/build/LLamaSharp.Backend.Android.nuspec @@ -0,0 +1,32 @@ + + + + LLamaSharp.Backend.Android + $version$ + LLamaSharp.Backend.Android - Android Backend for LLamaSharp + llama.cpp Authors + false + MIT + icon512.png + https://github.com/SciSharp/LLamaSharp + LLamaSharp.Backend.Android is a backend for LLamaSharp to use with Android. + + Copyright 2023 The llama.cpp Authors. All rights reserved. + LLamaSharp LLama LLM GPT AI ChatBot SciSharp + + + + + + + + + + + + + + + + + diff --git a/LLama/runtimes/build/LLamaSharp.Backend.Cpu.nuspec b/LLama/runtimes/build/LLamaSharp.Backend.Cpu.nuspec index 5c439e14b..a120613fd 100644 --- a/LLama/runtimes/build/LLamaSharp.Backend.Cpu.nuspec +++ b/LLama/runtimes/build/LLamaSharp.Backend.Cpu.nuspec @@ -44,7 +44,7 @@ - +