From 3b2836eac4abb417a79bef4c27ff5114945cb04a Mon Sep 17 00:00:00 2001 From: jlsantiago Date: Wed, 13 Mar 2024 23:10:44 +0100 Subject: [PATCH] Llava api (#563) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add llava_binaries, update all binaries to make the test * Llava API + LlavaTest Preliminary * First prototype of Load + Unit Test * Temporary run test con branch LlavaAPI * Disable Embed test to review the rest of the test * Restore Embedding test * Use BatchThread to eval image embeddings Test Threads default value to ensure it doesn´t produce problems. * Rename test file * Update action versions * Test only one method, no release embeddings * Revert "Test only one method, no release embeddings" This reverts commit 264e176dccc9cd0be318b800ae5e102a4635d01c. * Correct API call * Only test llava related functionality * Cuda and Cblast binaries * Restore build policy * Changes related with code review * Add SafeHandles * Set overwrite to upload-artifact@v4 * Revert to upload-artifact@v3 * revert to upload-artifact@v3 --- .github/workflows/compile.yml | 53 +++++++-- .github/workflows/main.yml | 6 +- LLama.Unittest/Constants.cs | 3 + LLama.Unittest/LLama.Unittest.csproj | 14 ++- LLama.Unittest/LLamaEmbedderTests.cs | 3 + LLama.Unittest/LLavaWeightsTests.cs | 53 +++++++++ .../Models/extreme-ironing-taxi-610x427.jpg | Bin 0 -> 92618 bytes LLama/LLamaSharp.Runtime.targets | 46 ++++++++ LLama/LLavaWeights.cs | 51 +++++++++ LLama/Native/LLavaImageEmbed.cs | 13 +++ LLama/Native/NativeApi.LLava.cs | 60 ++++++++++ LLama/Native/NativeApi.Load.cs | 7 ++ LLama/Native/SafeLlavaImageEmbedHandle.cs | 45 ++++++++ LLama/Native/SafeLlavaModelHandle.cs | 104 ++++++++++++++++++ 14 files changed, 441 insertions(+), 17 deletions(-) create mode 100644 LLama.Unittest/LLavaWeightsTests.cs create mode 100644 LLama.Unittest/Models/extreme-ironing-taxi-610x427.jpg create mode 100644 LLama/LLavaWeights.cs create mode 100644 LLama/Native/LLavaImageEmbed.cs create mode 100644 LLama/Native/NativeApi.LLava.cs create mode 100644 LLama/Native/SafeLlavaImageEmbedHandle.cs create mode 100644 LLama/Native/SafeLlavaModelHandle.cs diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index cd114c0b..83f1a888 100644 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -48,12 +48,12 @@ jobs: cd build cmake .. ${{ env.COMMON_DEFINE }} ${{ matrix.defines }} cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS} - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v3 with: path: ./build/libllama.so name: llama-bin-linux-${{ matrix.build }}-x64.so - name: Upload Llava - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: path: ./build/examples/llava/libllava_shared.so name: llava-bin-linux-${{ matrix.build }}-x64.so @@ -89,13 +89,13 @@ jobs: cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS} - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: path: .\build\bin\Release\llama.dll name: llama-bin-win-${{ matrix.build }}-x64.dll - name: Upload Llava - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: path: .\build\bin\Release\llava_shared.dll name: llava-bin-win-${{ matrix.build }}-x64.dll @@ -169,20 +169,35 @@ jobs: ls -R - name: Upload artifacts (Windows) if: ${{ matrix.os == 'windows-latest' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: path: | .\build\bin\Release\llama.dll .\build\bin\Release\clblast.dll name: llama-bin-win-clblast-x64.dll + - name: Upload llava artifacts (Windows) + if: ${{ matrix.os == 'windows-latest' }} + uses: actions/upload-artifact@v3 + with: + path: | + .\build\bin\Release\llava_shared.dll + name: llava-bin-win-clblast-x64.dll - name: Upload artifacts (linux) if: ${{ matrix.os == 'ubuntu-22.04' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: path: | ./build/libllama.so # ./build/libclblast.so name: llama-bin-linux-clblast-x64.so + - name: Upload llava artifacts (linux) + if: ${{ matrix.os == 'ubuntu-22.04' }} + uses: actions/upload-artifact@v3 + with: + path: | + ./build/examples/llava/libllava_shared.so + name: llava-bin-linux-clblast-x64.so + compile-cublas: name: Compile (cublas) @@ -228,16 +243,29 @@ jobs: - name: Upload artifacts (Windows) if: ${{ matrix.os == 'windows-latest' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: path: .\build\bin\Release\llama.dll name: llama-bin-win-cublas-cu${{ matrix.cuda }}-x64.dll + - name: Upload llava artifacts (Windows) + if: ${{ matrix.os == 'windows-latest' }} + uses: actions/upload-artifact@v3 + with: + path: .\build\bin\Release\llava_shared.dll + name: llava-bin-win-cublas-cu${{ matrix.cuda }}-x64.dll - name: Upload artifacts (Linux) if: ${{ matrix.os == 'ubuntu-20.04' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: path: ./build/libllama.so name: llama-bin-linux-cublas-cu${{ matrix.cuda }}-x64.so + - name: Upload llava artifacts (Linux) + if: ${{ matrix.os == 'ubuntu-20.04' }} + uses: actions/upload-artifact@v3 + with: + path: ./build/examples/llava/libllava_shared.so + name: llava-bin-linux-cublas-cu${{ matrix.cuda }}-x64.so + compile-macos: name: Compile (MacOS) @@ -268,18 +296,18 @@ jobs: cmake .. ${{ env.COMMON_DEFINE }} ${{ matrix.defines }} cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS} - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: path: ./build/libllama.dylib name: llama-bin-osx-${{ matrix.build }}.dylib - name: Upload Llava - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: path: ./build/examples/llava/libllava_shared.dylib name: llava-bin-osx-${{ matrix.build }}.dylib - name: Upload Metal if: ${{ matrix.build != 'x64' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: path: ./build/bin/ggml-metal.metal name: ggml-metal.metal @@ -347,11 +375,12 @@ jobs: cp artifacts/llama-bin-linux-clblast-x64.so/libllama.so deps/clblast/ - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: path: deps/ name: deps + - name: Remove Artifacts uses: geekyeggo/delete-artifact@v2 with: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5d7377f1..26d35207 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,14 +28,14 @@ jobs: os: windows-2019 config: release steps: - - uses: actions/checkout@v3 - - uses: actions/setup-dotnet@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-dotnet@v4 with: dotnet-version: | 7.0.x 8.0.x - name: Cache Packages - uses: actions/cache@v3 + uses: actions/cache@v4 with: key: "unit_test_models" path: LLama.Unittest/Models diff --git a/LLama.Unittest/Constants.cs b/LLama.Unittest/Constants.cs index 49e4906e..6e632449 100644 --- a/LLama.Unittest/Constants.cs +++ b/LLama.Unittest/Constants.cs @@ -3,5 +3,8 @@ internal static class Constants { public static string ModelPath = "Models/llama-2-7b-chat.Q3_K_S.gguf"; + public static string LLavaModelPath = "Models/llava-v1.6-mistral-7b.Q3_K_XS.gguf"; + public static string LLavaMmpPath = "Models/mmproj-model-f16.gguf"; + public static string LLavaImage = "Models/extreme-ironing-taxi-610x427.jpg"; } } diff --git a/LLama.Unittest/LLama.Unittest.csproj b/LLama.Unittest/LLama.Unittest.csproj index 920e6e98..f6bebea7 100644 --- a/LLama.Unittest/LLama.Unittest.csproj +++ b/LLama.Unittest/LLama.Unittest.csproj @@ -27,8 +27,9 @@ - - + + + @@ -44,5 +45,14 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + diff --git a/LLama.Unittest/LLamaEmbedderTests.cs b/LLama.Unittest/LLamaEmbedderTests.cs index ca15dc6f..9935fc86 100644 --- a/LLama.Unittest/LLamaEmbedderTests.cs +++ b/LLama.Unittest/LLamaEmbedderTests.cs @@ -14,6 +14,8 @@ public sealed class LLamaEmbedderTests _testOutputHelper = testOutputHelper; var @params = new ModelParams(Constants.ModelPath) { + ContextSize = 4096, + Threads = 5, EmbeddingMode = true, }; using var weights = LLamaWeights.LoadFromFile(@params); @@ -31,6 +33,7 @@ public sealed class LLamaEmbedderTests return a.Zip(b, (x, y) => x * y).Sum(); } + [Fact] public async Task EmbedCompare() { diff --git a/LLama.Unittest/LLavaWeightsTests.cs b/LLama.Unittest/LLavaWeightsTests.cs new file mode 100644 index 00000000..beeb2fc4 --- /dev/null +++ b/LLama.Unittest/LLavaWeightsTests.cs @@ -0,0 +1,53 @@ +using LLama.Common; +using LLama.Native; + +namespace LLama.Unittest +{ + // Test the same things as llama model + image embedings + // + public sealed class LLavaWeightTests + : IDisposable + { + private readonly LLamaWeights _llamaWeights; + private readonly LLavaWeights _lLavaWeights; + private readonly LLamaContext _context; + + public LLavaWeightTests() + { + var @params = new ModelParams(Constants.ModelPath) + { + // Llava models requires big context + ContextSize = 4096 + }; + _llamaWeights = LLamaWeights.LoadFromFile(@params); + _lLavaWeights = LLavaWeights.LoadFromFile(Constants.LLavaMmpPath); + + _context = _llamaWeights.CreateContext(@params); + + } + + public void Dispose() + { + _llamaWeights.Dispose(); + _lLavaWeights.Dispose(); + } + + + + [Fact] + public void EmbedImageAsFileName() + { + int n_past = 0; + Assert.True( _lLavaWeights.EmbedImage( _context, Constants.LLavaImage, ref n_past ) ); + } + + [Fact] + public void EmbedImageAsBinary() + { + int n_past = 0; + byte[] image = System.IO.File.ReadAllBytes(Constants.LLavaImage); + Assert.True( _lLavaWeights.EmbedImage( _context, image, ref n_past ) ); + } + + } +} diff --git a/LLama.Unittest/Models/extreme-ironing-taxi-610x427.jpg b/LLama.Unittest/Models/extreme-ironing-taxi-610x427.jpg new file mode 100644 index 0000000000000000000000000000000000000000..078fde7c4cb0f6b268060b021be7b2ce80b6a2dc GIT binary patch literal 92618 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
U0(9)D(^G8Sz$w)fQAC`mM&rCK+~}wPW?xU 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 literal 0 HcmV?d00001 diff --git a/LLama/LLamaSharp.Runtime.targets b/LLama/LLamaSharp.Runtime.targets index f26ad24e..35534d3f 100644 --- a/LLama/LLamaSharp.Runtime.targets +++ b/LLama/LLamaSharp.Runtime.targets @@ -67,5 +67,51 @@ 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/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/osx-arm64/native/libllava_shared.dylib + + + + PreserveNewest + runtimes/osx-x64/native/libllava_shared.dylib + + + \ No newline at end of file diff --git a/LLama/LLavaWeights.cs b/LLama/LLavaWeights.cs new file mode 100644 index 00000000..301fb729 --- /dev/null +++ b/LLama/LLavaWeights.cs @@ -0,0 +1,51 @@ + +using System; +using LLama.Native; + +namespace LLama; + +public sealed class LLavaWeights : IDisposable +{ + public SafeLlavaModelHandle NativeHandle { get; } + + internal LLavaWeights(SafeLlavaModelHandle weights) + { + NativeHandle = weights; + } + + public static LLavaWeights LoadFromFile(string mmProject) + { + var weights = SafeLlavaModelHandle.LoadFromFile(mmProject, 1); + return new LLavaWeights(weights); + } + + /// + /// Embed the image from file into llama context + /// + /// + /// + /// + /// + public bool EmbedImage(LLamaContext ctxLlama, string Image, ref int n_past ) + { + return NativeHandle.EmbedImage(ctxLlama, Image, ref n_past ); + } + + /// + /// Embed the image from binary into llama context. + /// + /// + /// + /// + /// + public bool EmbedImage(LLamaContext ctxLlama, Byte[] Image, ref int n_past ) + { + return NativeHandle.EmbedImage(ctxLlama, Image, ref n_past ); + } + + public void Dispose() + { + NativeHandle.Dispose(); + } + +} \ No newline at end of file diff --git a/LLama/Native/LLavaImageEmbed.cs b/LLama/Native/LLavaImageEmbed.cs new file mode 100644 index 00000000..2030515e --- /dev/null +++ b/LLama/Native/LLavaImageEmbed.cs @@ -0,0 +1,13 @@ +using System.Runtime.InteropServices; + +namespace LLama.Native; + +/// +/// LLaVa Image embeddings +/// +[StructLayout(LayoutKind.Sequential)] +unsafe public struct LLavaImageEmbed +{ + public float* embed; + public int n_image_pos; +} \ No newline at end of file diff --git a/LLama/Native/NativeApi.LLava.cs b/LLama/Native/NativeApi.LLava.cs new file mode 100644 index 00000000..7930e375 --- /dev/null +++ b/LLama/Native/NativeApi.LLava.cs @@ -0,0 +1,60 @@ +using System; +using System.Runtime.InteropServices; + +namespace LLama.Native; + +using clip_ctx = IntPtr; +public static unsafe partial class NativeApi +{ + /// + /// Sanity check for clip <-> llava embed size match + /// + /// + [DllImport(llavaLibraryName, EntryPoint = "llava_validate_embed_size", CallingConvention = CallingConvention.Cdecl)] + public static extern bool llava_validate_embed_size( SafeLLamaContextHandle ctxLlama, SafeLlavaModelHandle ctxClip); + + /// + /// Build an image embed from image file bytes + /// + /// + /// + /// + /// + /// + [DllImport(llavaLibraryName, EntryPoint = "llava_image_embed_make_with_bytes", + CallingConvention = CallingConvention.Cdecl)] + public static extern + SafeLlavaImageEmbedHandle llava_image_embed_make_with_bytes(SafeLlavaModelHandle ctx_clip, int n_threads, + byte[] image_bytes, int image_bytes_length); + + /// + /// Build an image embed from a path to an image filename + /// + /// + /// + /// + /// + [DllImport(llavaLibraryName, EntryPoint = "llava_image_embed_make_with_filename", CallingConvention = CallingConvention.Cdecl)] + public static extern + SafeLlavaImageEmbedHandle llava_image_embed_make_with_filename(SafeLlavaModelHandle ctx_clip, int n_threads, + [MarshalAs(UnmanagedType.LPStr)] string image_path); + + /// + /// Free an embedding made with llava_image_embed_make_* + /// + /// + /// + [DllImport(llavaLibraryName, EntryPoint = "llava_image_embed_free", CallingConvention = CallingConvention.Cdecl)] + public static extern SafeLlavaImageEmbedHandle llava_image_embed_free(IntPtr embed); + + /// + /// Write the image represented by embed into the llama context with batch size n_batch, starting at context + /// pos n_past. on completion, n_past points to the next position in the context after the image embed. + /// + /// ctx_llama + /// + [DllImport(llavaLibraryName, EntryPoint = "llava_eval_image_embed", CallingConvention = CallingConvention.Cdecl)] + public static extern bool llava_eval_image_embed(SafeLLamaContextHandle ctc_llama, SafeLlavaImageEmbedHandle embed, + int n_batch, ref int n_past); + +} \ No newline at end of file diff --git a/LLama/Native/NativeApi.Load.cs b/LLama/Native/NativeApi.Load.cs index c6c04e21..1b186816 100644 --- a/LLama/Native/NativeApi.Load.cs +++ b/LLama/Native/NativeApi.Load.cs @@ -235,6 +235,7 @@ namespace LLama.Native if (platform == OSPlatform.OSX) { result.Add($"{prefix}{libraryNamePrefix}{libraryName}{suffix}"); + result.Add($"{prefix}{libraryNamePrefix}{llavaLibraryName}{suffix}"); } return result; @@ -303,6 +304,11 @@ namespace LLama.Native if (result is not null && result != IntPtr.Zero) { Log($"{fullPath} is selected and loaded successfully.", LogLevel.Information); + + // One we have clear the detection and that llama loads successfully we load LLaVa if exist on the + // same path. + TryLoad( libraryPath.Replace("llama", "llava_shared"), true); + return (IntPtr)result; } @@ -338,6 +344,7 @@ namespace LLama.Native } internal const string libraryName = "llama"; + internal const string llavaLibraryName = "llava_shared"; private const string cudaVersionFile = "version.json"; private const string loggingPrefix = "[LLamaSharp Native]"; private static bool enableLogging = false; diff --git a/LLama/Native/SafeLlavaImageEmbedHandle.cs b/LLama/Native/SafeLlavaImageEmbedHandle.cs new file mode 100644 index 00000000..f1c62a2d --- /dev/null +++ b/LLama/Native/SafeLlavaImageEmbedHandle.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using LLama; +using LLama.Exceptions; + + +namespace LLama.Native +{ + /// + /// A Reference to a set of llava Image Embed handle + /// + public sealed class SafeLlavaImageEmbedHandle + : SafeLLamaHandleBase + { + + private SafeLlavaImageEmbedHandle(IntPtr handle) + : base(handle, true) + { + } + + private SafeLlavaImageEmbedHandle() + {} + + public static SafeLlavaImageEmbedHandle CreateFromFileName( SafeLlavaModelHandle ctxLlava, LLamaContext ctxLlama, string image ) + { + return NativeApi.llava_image_embed_make_with_filename(ctxLlava, (int) ctxLlama.BatchThreads, image); + } + + public static SafeLlavaImageEmbedHandle CreateFromMemory( SafeLlavaModelHandle ctxLlava, LLamaContext ctxLlama, Byte[] image ) + { + return NativeApi.llava_image_embed_make_with_bytes(ctxLlava, (int) ctxLlama.BatchThreads, image, image.Length); + } + + /// + protected override bool ReleaseHandle() + { + NativeApi.llava_image_embed_free(DangerousGetHandle()); + SetHandle(IntPtr.Zero); + return true; + } + } +} diff --git a/LLama/Native/SafeLlavaModelHandle.cs b/LLama/Native/SafeLlavaModelHandle.cs new file mode 100644 index 00000000..f9544041 --- /dev/null +++ b/LLama/Native/SafeLlavaModelHandle.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using LLama; +using LLama.Exceptions; + + +namespace LLama.Native +{ + /// + /// A reference to a set of llava model weights + /// + public sealed class SafeLlavaModelHandle + : SafeLLamaHandleBase + { + + private SafeLlavaModelHandle(IntPtr handle) + : base(handle, true) + { + } + + private SafeLlavaModelHandle() + {} + + /// + protected override bool ReleaseHandle() + { + clip_free(DangerousGetHandle()); + SetHandle(IntPtr.Zero); + return true; + } + + /// + /// Load a model from the given file path into memory + /// + /// + /// + /// + /// + public static SafeLlavaModelHandle LoadFromFile(string modelPath, int verbosity ) + { + + // Try to open the model file, this will check: + // - File exists (automatically throws FileNotFoundException) + // - File is readable (explicit check) + // This provides better error messages that llama.cpp, which would throw an access violation exception in both cases. + using (var fs = new FileStream(modelPath, FileMode.Open)) + if (!fs.CanRead) + throw new InvalidOperationException($"Llava MMP Model file '{modelPath}' is not readable"); + + return clip_model_load(modelPath, verbosity) + ?? throw new RuntimeError($"Failed to load LLaVa model {modelPath}."); + } + + /// + /// Embed the image from file in llama context + /// + /// + /// + /// + /// + public bool EmbedImage(LLamaContext ctxLlama, string image, ref int n_past) + { + var ImageEmbed = SafeLlavaImageEmbedHandle.CreateFromFileName(this, ctxLlama, image); + bool result = NativeApi.llava_eval_image_embed(ctxLlama.NativeHandle, ImageEmbed, (int)ctxLlama.Params.BatchSize, ref n_past ); + return result; + } + + /// + /// Embed the image from binary in llama context + /// + /// + /// jpeg image + /// + /// + public bool EmbedImage(LLamaContext ctxLlama, Byte[] image, ref int n_past ) + { + var ImageEmbed = SafeLlavaImageEmbedHandle.CreateFromMemory(this, ctxLlama, image ); + bool result = NativeApi.llava_eval_image_embed(ctxLlama.NativeHandle, ImageEmbed, (int)ctxLlama.Params.BatchSize, ref n_past ); + return result; + } + + /// + /// Load MULTI MODAL PROJECTIONS model / Clip Model + /// + /// Model path/file + /// Verbosity level + /// SafeLlavaModelHandle + [DllImport(NativeApi.llavaLibraryName, EntryPoint = "clip_model_load", CallingConvention = CallingConvention.Cdecl)] + private static extern SafeLlavaModelHandle clip_model_load(string mmProj, int verbosity); + + /// + /// Frees MULTI MODAL PROJECTIONS model / Clip Model + /// + /// + [DllImport(NativeApi.llavaLibraryName, EntryPoint = "clip_free", CallingConvention = CallingConvention.Cdecl)] + private static extern void clip_free(IntPtr ctx); + + + } +}