|
|
|
@@ -1,12 +1,12 @@ |
|
|
|
using LLama.Abstractions; |
|
|
|
using LLama.Exceptions; |
|
|
|
using LLama.Native; |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.IO; |
|
|
|
using System.Linq; |
|
|
|
using System.Runtime.InteropServices; |
|
|
|
using System.Text; |
|
|
|
using LLama.Exceptions; |
|
|
|
using LLama.Extensions; |
|
|
|
|
|
|
|
namespace LLama |
|
|
|
{ |
|
|
|
@@ -15,43 +15,16 @@ namespace LLama |
|
|
|
{ |
|
|
|
public static SafeLLamaContextHandle InitLLamaContextFromModelParams(IModelParams @params) |
|
|
|
{ |
|
|
|
if (!File.Exists(@params.ModelPath)) |
|
|
|
throw new FileNotFoundException($"The model file does not exist: {@params.ModelPath}"); |
|
|
|
|
|
|
|
if (@params.TensorSplits != null && @params.TensorSplits.Length != 1) |
|
|
|
throw new ArgumentException("Currently multi-gpu support is not supported by both llama.cpp and LLamaSharp."); |
|
|
|
|
|
|
|
var lparams = NativeApi.llama_context_default_params(); |
|
|
|
lparams.n_ctx = @params.ContextSize; |
|
|
|
lparams.n_batch = @params.BatchSize; |
|
|
|
lparams.main_gpu = @params.MainGpu; |
|
|
|
lparams.n_gpu_layers = @params.GpuLayerCount; |
|
|
|
lparams.seed = @params.Seed; |
|
|
|
lparams.f16_kv = @params.UseFp16Memory; |
|
|
|
lparams.use_mmap = @params.UseMemoryLock; |
|
|
|
lparams.use_mlock = @params.UseMemoryLock; |
|
|
|
lparams.logits_all = @params.Perplexity; |
|
|
|
lparams.embedding = @params.EmbeddingMode; |
|
|
|
lparams.low_vram = @params.LowVram; |
|
|
|
lparams.n_gqa = @params.GroupedQueryAttention; |
|
|
|
lparams.rms_norm_eps = @params.RmsNormEpsilon; |
|
|
|
lparams.rope_freq_base = @params.RopeFrequencyBase; |
|
|
|
lparams.rope_freq_scale = @params.RopeFrequencyScale; |
|
|
|
lparams.mul_mat_q = @params.MulMatQ; |
|
|
|
|
|
|
|
using var pin = @params.TensorSplits.AsMemory().Pin(); |
|
|
|
unsafe |
|
|
|
using (@params.ToLlamaContextParams(out var lparams)) |
|
|
|
{ |
|
|
|
lparams.tensor_split = (nint)pin.Pointer; |
|
|
|
} |
|
|
|
var model = SafeLlamaModelHandle.LoadFromFile(@params.ModelPath, lparams); |
|
|
|
var ctx = SafeLLamaContextHandle.Create(model, lparams); |
|
|
|
|
|
|
|
var model = SafeLlamaModelHandle.LoadFromFile(@params.ModelPath, lparams); |
|
|
|
var ctx = SafeLLamaContextHandle.Create(model, lparams); |
|
|
|
if (!string.IsNullOrEmpty(@params.LoraAdapter)) |
|
|
|
model.ApplyLoraFromFile(@params.LoraAdapter, @params.LoraBase, @params.Threads); |
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(@params.LoraAdapter)) |
|
|
|
model.ApplyLoraFromFile(@params.LoraAdapter, @params.LoraBase, @params.Threads); |
|
|
|
|
|
|
|
return ctx; |
|
|
|
return ctx; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static IEnumerable<llama_token> Tokenize(SafeLLamaContextHandle ctx, string text, bool add_bos, Encoding encoding) |
|
|
|
|