Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 93 additions & 1 deletion .github/workflows/compile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,72 @@ jobs:
name: llava-bin-linux-${{ matrix.build }}-x64.so
if-no-files-found: error

compile-musl:
name: Compile (musl)
strategy:
fail-fast: true
matrix:
include:
- build: 'noavx'
defines: '-DGGML_AVX=OFF -DGGML_AVX2=OFF -DGGML_FMA=OFF'
- build: 'avx2'
defines: ''
- build: 'avx'
defines: '-DGGML_AVX2=OFF'
- build: 'avx512'
defines: '-DGGML_AVX512=ON'
runs-on: ubuntu-20.04
container:
image: alpine:latest
steps:
- name: Install dependencies
run: |
apk update && apk add --no-cache \
build-base \
cmake \
git \
linux-headers \
g++
- uses: actions/checkout@v4
with:
repository: ggerganov/llama.cpp
fetch-depth: 0
ref: '${{ github.event.inputs.llama_cpp_commit }}'
- name: Build
id: cmake_build_musl
run: |
mkdir build
cd build
cmake .. ${{ env.COMMON_DEFINE }} ${{ matrix.defines }}
cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS}
ls -R
- uses: actions/upload-artifact@v4
with:
path: ./build/bin/libllama.so
name: llama-bin-musl-${{ matrix.build }}-x64.so
if-no-files-found: error
- uses: actions/upload-artifact@v4
with:
path: ./build/bin/libggml.so
name: ggml-bin-musl-${{ matrix.build }}-x64.so
if-no-files-found: error
- uses: actions/upload-artifact@v4
with:
path: ./build/bin/libggml-base.so
name: ggml-base-bin-musl-${{ matrix.build }}-x64.so
if-no-files-found: error
- uses: actions/upload-artifact@v4
with:
path: ./build/bin/libggml-cpu.so
name: ggml-cpu-bin-musl-${{ matrix.build }}-x64.so
if-no-files-found: error
- name: Upload Llava
uses: actions/upload-artifact@v4
with:
path: ./build/bin/libllava_shared.so
name: llava-bin-musl-${{ matrix.build }}-x64.so
if-no-files-found: error

compile-windows:
name: Compile (Windows)
strategy:
Expand Down Expand Up @@ -519,6 +585,7 @@ jobs:
if: ${{ always() }}
needs: [
"compile-linux",
"compile-musl",
"compile-windows",
"compile-vulkan",
"compile-cublas",
Expand All @@ -534,7 +601,7 @@ jobs:
- name: Rearrange Files
run: |
# Make all directories at once
mkdir --parents deps/{noavx,avx,avx2,avx512,osx-arm64,osx-x64,osx-x64-rosetta2,cu11.7.1,cu12.2.0,vulkan,android-arm64-v8a,android-x86,android-x86_64}
mkdir --parents deps/{noavx,avx,avx2,avx512,musl-noavx,musl-avx,musl-avx2,musl-avx512,osx-arm64,osx-x64,osx-x64-rosetta2,cu11.7.1,cu12.2.0,vulkan,android-arm64-v8a,android-x86,android-x86_64}

# Linux
cp artifacts/ggml-bin-linux-noavx-x64.so/libggml.so deps/noavx/libggml.so
Expand All @@ -561,6 +628,31 @@ jobs:
cp artifacts/llama-bin-linux-avx512-x64.so/libllama.so deps/avx512/libllama.so
cp artifacts/llava-bin-linux-avx512-x64.so/libllava_shared.so deps/avx512/libllava_shared.so

# Musl
cp artifacts/ggml-bin-musl-noavx-x64.so/libggml.so deps/musl-noavx/libggml.so
cp artifacts/ggml-base-bin-musl-noavx-x64.so/libggml-base.so deps/musl-noavx/libggml-base.so
cp artifacts/ggml-cpu-bin-musl-noavx-x64.so/libggml-cpu.so deps/musl-noavx/libggml-cpu.so
cp artifacts/llama-bin-musl-noavx-x64.so/libllama.so deps/musl-noavx/libllama.so
cp artifacts/llava-bin-musl-noavx-x64.so/libllava_shared.so deps/musl-noavx/libllava_shared.so

cp artifacts/ggml-bin-musl-avx-x64.so/libggml.so deps/musl-avx/libggml.so
cp artifacts/ggml-base-bin-musl-avx-x64.so/libggml-base.so deps/musl-avx/libggml-base.so
cp artifacts/ggml-cpu-bin-musl-avx-x64.so/libggml-cpu.so deps/musl-avx/libggml-cpu.so
cp artifacts/llama-bin-musl-avx-x64.so/libllama.so deps/musl-avx/libllama.so
cp artifacts/llava-bin-musl-avx-x64.so/libllava_shared.so deps/musl-avx/libllava_shared.so

cp artifacts/ggml-bin-musl-avx2-x64.so/libggml.so deps/musl-avx2/libggml.so
cp artifacts/ggml-base-bin-musl-avx2-x64.so/libggml-base.so deps/musl-avx2/libggml-base.so
cp artifacts/ggml-cpu-bin-musl-avx2-x64.so/libggml-cpu.so deps/musl-avx2/libggml-cpu.so
cp artifacts/llama-bin-musl-avx2-x64.so/libllama.so deps/musl-avx2/libllama.so
cp artifacts/llava-bin-musl-avx2-x64.so/libllava_shared.so deps/musl-avx2/libllava_shared.so

cp artifacts/ggml-bin-musl-avx512-x64.so/libggml.so deps/musl-avx512/libggml.so
cp artifacts/ggml-base-bin-musl-avx512-x64.so/libggml-base.so deps/musl-avx512/libggml-base.so
cp artifacts/ggml-cpu-bin-musl-avx512-x64.so/libggml-cpu.so deps/musl-avx512/libggml-cpu.so
cp artifacts/llama-bin-musl-avx512-x64.so/libllama.so deps/musl-avx512/libllama.so
cp artifacts/llava-bin-musl-avx512-x64.so/libllava_shared.so deps/musl-avx512/libllava_shared.so

# Windows
cp artifacts/ggml-bin-win-noavx-x64.dll/ggml.dll deps/noavx/ggml.dll
cp artifacts/ggml-base-bin-win-noavx-x64.dll/ggml-base.dll deps/noavx/ggml-base.dll
Expand Down
70 changes: 70 additions & 0 deletions LLama/LLamaSharp.Runtime.targets
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-x64/native/avx512/libggml-cpu.so</Link>
</None>


<None Include="$(MSBuildThisFileDirectory)runtimes/deps/cu11.7.1/libllama.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
Expand Down Expand Up @@ -253,6 +254,75 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-x64/native/vulkan/libggml-vulkan.so</Link>
</None>


<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-noavx/libllama.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/noavx/libllama.so</Link>
</None>
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-noavx/libggml.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/noavx/libggml.so</Link>
</None>
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-noavx/libggml-base.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/noavx/libggml-base.so</Link>
</None>
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-noavx/libggml-cpu.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/noavx/libggml-cpu.so</Link>
</None>

<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx/libllama.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/avx/libllama.so</Link>
</None>
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx/libggml.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/avx/libggml.so</Link>
</None>
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx/libggml-base.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/avx/libggml-base.so</Link>
</None>
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx/libggml-cpu.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/avx/libggml-cpu.so</Link>
</None>

<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx2/libllama.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/avx2/libllama.so</Link>
</None>
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx2/libggml.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/avx2/libggml.so</Link>
</None>
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx2/libggml-base.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/avx2/libggml-base.so</Link>
</None>
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx2/libggml-cpu.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/avx2/libggml-cpu.so</Link>
</None>

<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx512/libllama.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/avx512/libllama.so</Link>
</None>
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx512/libggml.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/avx512/libggml.so</Link>
</None>
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx512/libggml-base.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/avx512/libggml-base.so</Link>
</None>
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx512/libggml-cpu.so">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>runtimes/linux-musl-x64/native/avx512/libggml-cpu.so</Link>
</None>


<None Include="$(MSBuildThisFileDirectory)runtimes/deps/osx-arm64/libggml-base.dylib">
Expand Down
20 changes: 16 additions & 4 deletions LLama/Native/Load/NativeLibraryUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -218,10 +218,22 @@ public static void GetPlatformPathParts(OSPlatform platform, out string os, out

if (platform == OSPlatform.Linux)
{
os = "linux-x64";
fileExtension = ".so";
libPrefix = "lib";
return;
if(RuntimeInformation.RuntimeIdentifier.ToLower().StartsWith("alpine"))
{
// alpine linux distro
os = "linux-musl-x64";
fileExtension = ".so";
libPrefix = "lib";
return;
}
else
{
// other linux distro
os = "linux-x64";
fileExtension = ".so";
libPrefix = "lib";
return;
}
}

if (platform == OSPlatform.OSX)
Expand Down
24 changes: 24 additions & 0 deletions LLama/runtimes/build/LLamaSharp.Backend.Cpu.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,31 @@
<file src="runtimes/deps/avx512/libggml-cpu.so" target="runtimes\linux-x64\native\avx512\libggml-cpu.so" />
<file src="runtimes/deps/avx512/libllama.so" target="runtimes\linux-x64\native\avx512\libllama.so" />
<file src="runtimes/deps/avx512/libllava_shared.so" target="runtimes\linux-x64\native\avx512\libllava_shared.so" />

<file src="runtimes/deps/musl-noavx/libggml.so" target="runtimes\linux-musl-x64\native\noavx\libggml.so" />
<file src="runtimes/deps/musl-noavx/libggml-base.so" target="runtimes\linux-musl-x64\native\noavx\libggml-base.so" />
<file src="runtimes/deps/musl-noavx/libggml-cpu.so" target="runtimes\linux-musl-x64\native\noavx\libggml-cpu.so" />
<file src="runtimes/deps/musl-noavx/libllama.so" target="runtimes\linux-musl-x64\native\noavx\libllama.so" />
<file src="runtimes/deps/musl-noavx/libllava_shared.so" target="runtimes\linux-musl-x64\native\noavx\libllava_shared.so" />

<file src="runtimes/deps/musl-avx/libggml.so" target="runtimes\linux-musl-x64\native\avx\libggml.so" />
<file src="runtimes/deps/musl-avx/libggml-base.so" target="runtimes\linux-musl-x64\native\avx\libggml-base.so" />
<file src="runtimes/deps/musl-avx/libggml-cpu.so" target="runtimes\linux-musl-x64\native\avx\libggml-cpu.so" />
<file src="runtimes/deps/musl-avx/libllama.so" target="runtimes\linux-musl-x64\native\avx\libllama.so" />
<file src="runtimes/deps/musl-avx/libllava_shared.so" target="runtimes\linux-musl-x64\native\avx\libllava_shared.so" />

<file src="runtimes/deps/musl-avx2/libggml.so" target="runtimes\linux-musl-x64\native\avx2\libggml.so" />
<file src="runtimes/deps/musl-avx2/libggml-base.so" target="runtimes\linux-musl-x64\native\avx2\libggml-base.so" />
<file src="runtimes/deps/musl-avx2/libggml-cpu.so" target="runtimes\linux-musl-x64\native\avx2\libggml-cpu.so" />
<file src="runtimes/deps/musl-avx2/libllama.so" target="runtimes\linux-musl-x64\native\avx2\libllama.so" />
<file src="runtimes/deps/musl-avx2/libllava_shared.so" target="runtimes\linux-musl-x64\native\avx2\libllava_shared.so" />

<file src="runtimes/deps/musl-avx512/libggml.so" target="runtimes\linux-musl-x64\native\avx512\libggml.so" />
<file src="runtimes/deps/musl-avx512/libggml-base.so" target="runtimes\linux-musl-x64\native\avx512\libggml-base.so" />
<file src="runtimes/deps/musl-avx512/libggml-cpu.so" target="runtimes\linux-musl-x64\native\avx512\libggml-cpu.so" />
<file src="runtimes/deps/musl-avx512/libllama.so" target="runtimes\linux-musl-x64\native\avx512\libllama.so" />
<file src="runtimes/deps/musl-avx512/libllava_shared.so" target="runtimes\linux-musl-x64\native\avx512\libllava_shared.so" />

<file src="runtimes/deps/osx-x64/libggml.dylib" target="runtimes\osx-x64\native\libggml.dylib" />
<file src="runtimes/deps/osx-x64/libggml-base.dylib" target="runtimes\osx-x64\native\libggml-base.dylib" />
<file src="runtimes/deps/osx-x64/libggml-cpu.dylib" target="runtimes\osx-x64\native\libggml-cpu.dylib" />
Expand Down
Loading