diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cf0c784c..aa0aefc9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,11 +15,14 @@ jobs: strategy: fail-fast: false matrix: - build: [linux-release, windows-release] + build: [linux-release, windows-release, osx-release] include: - build: linux-release os: ubuntu-latest config: release + - build: osx-release + os: macos-14 # https://github.blog/changelog/2024-01-30-github-actions-introducing-the-new-m1-macos-runner-available-to-open-source/ + config: release - build: windows-release os: windows-2019 config: release @@ -27,8 +30,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-dotnet@v4 with: - dotnet-version: | - 7.0.x + dotnet-version: | 8.0.x - name: Cache Packages uses: actions/cache@v4 @@ -43,7 +45,7 @@ jobs: - name: Build run: dotnet build LLamaSharp.sln -c ${{ matrix.config }} --no-restore - name: Test - run: dotnet test LLamaSharp.sln -c ${{ matrix.config }} -l "console;verbosity=detailed" --diag:logs/log.txt + run: dotnet test LLamaSharp.sln -c ${{ matrix.config }} -l "console;verbosity=detailed" --diag:logs/log.txt --filter Category!=NoCI - name: Upload artifacts if: always() uses: actions/upload-artifact@v3 diff --git a/LLama.Unittest/BasicTest.cs b/LLama.Unittest/BasicTest.cs index 7c897b78..1d54a7e9 100644 --- a/LLama.Unittest/BasicTest.cs +++ b/LLama.Unittest/BasicTest.cs @@ -17,7 +17,8 @@ namespace LLama.Unittest _testOutputHelper = testOutputHelper; _params = new ModelParams(Constants.GenerativeModelPath) { - ContextSize = 2048 + ContextSize = 2048, + GpuLayerCount = Constants.CIGpuLayerCount }; _model = LLamaWeights.LoadFromFile(_params); } diff --git a/LLama.Unittest/BeamTests.cs b/LLama.Unittest/BeamTests.cs index f4aa01ab..88b25672 100644 --- a/LLama.Unittest/BeamTests.cs +++ b/LLama.Unittest/BeamTests.cs @@ -17,7 +17,8 @@ public sealed class BeamTests _testOutputHelper = testOutputHelper; _params = new ModelParams(Constants.GenerativeModelPath) { - ContextSize = 2048 + ContextSize = 2048, + GpuLayerCount = Constants.CIGpuLayerCount, }; _model = LLamaWeights.LoadFromFile(_params); } @@ -27,7 +28,6 @@ public sealed class BeamTests _model.Dispose(); } - //[Fact(Skip = "Very very slow in CI")] [Fact] public void BasicBeam() { diff --git a/LLama.Unittest/Constants.cs b/LLama.Unittest/Constants.cs index 6e5e92c5..4852a335 100644 --- a/LLama.Unittest/Constants.cs +++ b/LLama.Unittest/Constants.cs @@ -1,4 +1,6 @@ -namespace LLama.Unittest +using System.Runtime.InteropServices; + +namespace LLama.Unittest { internal static class Constants { @@ -8,5 +10,25 @@ public static readonly string LLavaModelPath = "Models/llava-v1.6-mistral-7b.Q3_K_XS.gguf"; public static readonly string LLavaMmpPath = "Models/mmproj-model-f16.gguf"; public static readonly string LLavaImage = "Models/extreme-ironing-taxi-610x427.jpg"; + + /// + /// Calculate GpuLayer Count to use in UnitTest + /// + /// Defaults to 20 in all the cases, except MacOS/OSX release (to disable METAL on github CI) + public static int CIGpuLayerCount + { + get + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + #if DEBUG + return 20; + #else + return 0; + #endif + } + else return 20; + } + } } } diff --git a/LLama.Unittest/GrammarTest.cs b/LLama.Unittest/GrammarTest.cs index 1ab9dea6..d4f6a95b 100644 --- a/LLama.Unittest/GrammarTest.cs +++ b/LLama.Unittest/GrammarTest.cs @@ -16,6 +16,7 @@ namespace LLama.Unittest { ContextSize = 2048, Seed = 92, + GpuLayerCount = Constants.CIGpuLayerCount, }; _model = LLamaWeights.LoadFromFile(_params); } diff --git a/LLama.Unittest/LLamaContextTests.cs b/LLama.Unittest/LLamaContextTests.cs index fe247c6e..cc53e369 100644 --- a/LLama.Unittest/LLamaContextTests.cs +++ b/LLama.Unittest/LLamaContextTests.cs @@ -14,6 +14,7 @@ namespace LLama.Unittest var @params = new ModelParams(Constants.GenerativeModelPath) { ContextSize = 768, + GpuLayerCount = Constants.CIGpuLayerCount, }; _weights = LLamaWeights.LoadFromFile(@params); _context = _weights.CreateContext(@params); diff --git a/LLama.Unittest/LLamaEmbedderTests.cs b/LLama.Unittest/LLamaEmbedderTests.cs index 31d6199b..4c2bc8ab 100644 --- a/LLama.Unittest/LLamaEmbedderTests.cs +++ b/LLama.Unittest/LLamaEmbedderTests.cs @@ -1,4 +1,4 @@ -using LLama.Common; +using LLama.Common; using Xunit.Abstractions; namespace LLama.Unittest; @@ -10,7 +10,21 @@ public sealed class LLamaEmbedderTests public LLamaEmbedderTests(ITestOutputHelper testOutputHelper) { _testOutputHelper = testOutputHelper; - + + var @params = new ModelParams(Constants.EmbeddingModelPath) + { + ContextSize = 4096, + Threads = 5, + Embeddings = true, + GpuLayerCount = Constants.CIGpuLayerCount, + }; + using var weights = LLamaWeights.LoadFromFile(@params); + _embedder = new(weights, @params); + } + + public void Dispose() + { + _embedder.Dispose(); } private static float Dot(float[] a, float[] b) diff --git a/LLama.Unittest/LLavaWeightsTests.cs b/LLama.Unittest/LLavaWeightsTests.cs index e5df3073..30d41fd9 100644 --- a/LLama.Unittest/LLavaWeightsTests.cs +++ b/LLama.Unittest/LLavaWeightsTests.cs @@ -17,7 +17,8 @@ namespace LLama.Unittest var @params = new ModelParams(Constants.GenerativeModelPath) { // Llava models requires big context - ContextSize = 4096 + ContextSize = 4096, + GpuLayerCount = Constants.CIGpuLayerCount, }; _llamaWeights = LLamaWeights.LoadFromFile(@params); _lLavaWeights = LLavaWeights.LoadFromFile(Constants.LLavaMmpPath); @@ -32,7 +33,7 @@ namespace LLama.Unittest _lLavaWeights.Dispose(); } - [Fact(Skip = "Very very slow in CI")] + [Fact,Trait("Category", "NoCI")] public void EmbedImageAsFileName() { int n_past = 0; @@ -40,7 +41,7 @@ namespace LLama.Unittest Assert.True( _lLavaWeights.EvalImageEmbed( _context, emb, ref n_past ) ); } - [Fact(Skip = "Very very slow in CI")] + [Fact,Trait("Category", "NoCI")] public void EmbedImageAsBinary() { int n_past = 0; diff --git a/LLama.Unittest/MemoryDisposalTests.cs b/LLama.Unittest/MemoryDisposalTests.cs index e29ad46d..60cd75fd 100644 --- a/LLama.Unittest/MemoryDisposalTests.cs +++ b/LLama.Unittest/MemoryDisposalTests.cs @@ -9,7 +9,8 @@ public class MemoryDisposalTests { var @params = new ModelParams(Constants.GenerativeModelPath) { - ContextSize = 2048 + ContextSize = 2048, + GpuLayerCount = 0, }; var model = LLamaWeights.LoadFromFile(@params); @@ -23,7 +24,8 @@ public class MemoryDisposalTests { var @params = new ModelParams(Constants.GenerativeModelPath) { - ContextSize = 2048 + ContextSize = 2048, + GpuLayerCount = Constants.CIGpuLayerCount, }; var model = LLamaWeights.LoadFromFile(@params); diff --git a/LLama.Unittest/StatelessExecutorTest.cs b/LLama.Unittest/StatelessExecutorTest.cs index 3ca8a76e..18f3c25d 100644 --- a/LLama.Unittest/StatelessExecutorTest.cs +++ b/LLama.Unittest/StatelessExecutorTest.cs @@ -20,6 +20,7 @@ namespace LLama.Unittest ContextSize = 60, Seed = 1754, BatchSize = 2, + GpuLayerCount = Constants.CIGpuLayerCount, }; _weights = LLamaWeights.LoadFromFile(_params); } diff --git a/LLama.Unittest/TokenTests.cs b/LLama.Unittest/TokenTests.cs index c11e3ae9..03e3927f 100644 --- a/LLama.Unittest/TokenTests.cs +++ b/LLama.Unittest/TokenTests.cs @@ -14,7 +14,8 @@ public sealed class TokenTests { _params = new ModelParams(Constants.GenerativeModelPath) { - ContextSize = 2048 + ContextSize = 2048, + GpuLayerCount = Constants.CIGpuLayerCount, }; _model = LLamaWeights.LoadFromFile(_params); }