From eed96248b54d29f32516d70f72d0e395186e798f Mon Sep 17 00:00:00 2001 From: Yaohui Liu Date: Tue, 20 Jun 2023 01:53:46 +0800 Subject: [PATCH] docs: add the documentations with mkdocs. --- LLama.Examples/NewVersion/TestRunner.cs | 4 +- docs/Architecher.md | 23 ++ docs/ChatSession/basic-usages.md | 36 ++++ docs/ChatSession/save-load-session.md | 14 ++ docs/ChatSession/transforms.md | 245 +++++++++++++++++++++ docs/ContributingGuide.md | 65 ++++++ docs/GetStarted.md | 110 ++++++++++ docs/HighLevelApps/bot-sharp.md | 3 + docs/LLamaExecutors/differences.md | 69 ++++++ docs/LLamaExecutors/parameters.md | 261 +++++++++++++++++++++++ docs/LLamaExecutors/save-load-state.md | 27 +++ docs/LLamaExecutors/text-to-text-apis.md | 18 ++ docs/LLamaModel/embeddings.md | 13 ++ docs/LLamaModel/parameters.md | 208 ++++++++++++++++++ docs/LLamaModel/quantization.md | 23 ++ docs/LLamaModel/save-load-state.md | 19 ++ docs/LLamaModel/tokenization.md | 25 +++ docs/More/log.md | 163 ++++++++++++++ docs/NonEnglishUsage/Chinese.md | 3 + docs/Tricks.md | 44 ++++ docs/index.md | 36 ++++ docs/media/LLamaSharpLogo.png | Bin 0 -> 41408 bytes docs/media/structure.jpg | Bin 0 -> 164821 bytes docs/media/structure.vsdx | Bin 0 -> 33293 bytes mkdocs.yml | 29 +++ 25 files changed, 1436 insertions(+), 2 deletions(-) create mode 100644 docs/Architecher.md create mode 100644 docs/ChatSession/basic-usages.md create mode 100644 docs/ChatSession/save-load-session.md create mode 100644 docs/ChatSession/transforms.md create mode 100644 docs/ContributingGuide.md create mode 100644 docs/GetStarted.md create mode 100644 docs/HighLevelApps/bot-sharp.md create mode 100644 docs/LLamaExecutors/differences.md create mode 100644 docs/LLamaExecutors/parameters.md create mode 100644 docs/LLamaExecutors/save-load-state.md create mode 100644 docs/LLamaExecutors/text-to-text-apis.md create mode 100644 docs/LLamaModel/embeddings.md create mode 100644 docs/LLamaModel/parameters.md create mode 100644 docs/LLamaModel/quantization.md create mode 100644 docs/LLamaModel/save-load-state.md create mode 100644 docs/LLamaModel/tokenization.md create mode 100644 docs/More/log.md create mode 100644 docs/NonEnglishUsage/Chinese.md create mode 100644 docs/Tricks.md create mode 100644 docs/index.md create mode 100644 docs/media/LLamaSharpLogo.png create mode 100644 docs/media/structure.jpg create mode 100644 docs/media/structure.vsdx create mode 100644 mkdocs.yml diff --git a/LLama.Examples/NewVersion/TestRunner.cs b/LLama.Examples/NewVersion/TestRunner.cs index 249940b8..23c9ae6b 100644 --- a/LLama.Examples/NewVersion/TestRunner.cs +++ b/LLama.Examples/NewVersion/TestRunner.cs @@ -30,11 +30,11 @@ namespace LLama.Examples.NewVersion if (choice == 0) { - ChatSessionStripRoleName.Run(); + ChatSessionWithRoleName.Run(); } else if (choice == 1) { - ChatSessionWithRoleName.Run(); + ChatSessionStripRoleName.Run(); } else if(choice == 2) { diff --git a/docs/Architecher.md b/docs/Architecher.md new file mode 100644 index 00000000..a31d3e87 --- /dev/null +++ b/docs/Architecher.md @@ -0,0 +1,23 @@ +# Architecher + +## Architecher of main functions + +The figure below shows the core framework structure, which is separated to four levels. + +- **LLamaModel**: The holder of a model which directly interact with native library and provide some basic APIs such as tokenization and embedding. Currently it includes three classes: `LLamaModel`, `LLamaEmbedder` and `LLamaQuantizer`. +- **LLamaExecutors**: Executors which define the way to run the LLama model. It provides text-to-text APIs to make it easy to use. Currently we provide three kinds of executors: `InteractiveExecutor`, `InstructuExecutor` and `StatelessExecutor`. +- **ChatSession**: A wrapping for `InteractiveExecutor` and `LLamaModel`, which supports interactive tasks and saving/re-loading sessions. It also provides a flexible way to customize the text process by `IHistoryTransform`, `ITextTransform` and `ITextStreamTransform`. +- **High-level Applications**: Some applications that provides higher-level integration. For example, [BotSharp](https://github.com/SciSharp/BotSharp) provides integration for vector search, Chatbot UI and Web APIs. [semantic-kernel](https://github.com/microsoft/semantic-kernel) provides various APIs for manipulations related with LLM. If you've made an integration, please tell us and add it to the doc! + + +![structure_image](media/structure.jpg) + +## Recommended usings + +Since `LLamaModel` interact with native library, it's not recommended to use the methods of it directly unless you know what you are doing. So does the `NativeApi`, which is not included in the arcitecher figure above. + +`ChatSession` is recommended to be used when you want to build an application similar to ChatGPT, or the ChatBot, because it works best with `InteractiveExecutor`. Though other executors are also allowed to passed as a parameter to initialize a `ChatSession`, it's not encouraged if you are new to LLamaSharp and LLM. + +High-level applications, such as BotSharp, are supposed to be used when you concentrate on the part not related with LLM. For example, if you want to deploy a chat bot to help you remember your schedules, using BotSharp may be a good choice. + +Note that the APIs of the high-level applications may not be stable now. Please take it into account when using them. \ No newline at end of file diff --git a/docs/ChatSession/basic-usages.md b/docs/ChatSession/basic-usages.md new file mode 100644 index 00000000..b8ab900d --- /dev/null +++ b/docs/ChatSession/basic-usages.md @@ -0,0 +1,36 @@ +# Basic usages of ChatSession + +`ChatSession` is a higher-level absatrction than the executors. In the context of a chat application like ChatGPT, a "chat session" refers to an interactive conversation or exchange of messages between the user and the chatbot. It represents a continuous flow of communication where the user enters input or asks questions, and the chatbot responds accordingly. A chat session typically starts when the user initiates a conversation with the chatbot and continues until the interaction comes to a natural end or is explicitly terminated by either the user or the system. During a chat session, the chatbot maintains the context of the conversation, remembers previous messages, and generates appropriate responses based on the user's inputs and the ongoing dialogue. + +## Initialize a session + +Currently, the only parameter that is accepted is an `ILLamaExecutor`, because this is the only parameter that we're sure to exist in all the future versions. Since it's the high-level absatrction, we're conservative to the API designs. In the future, there may be more kinds of constructors added. + +```cs +InteractiveExecutor ex = new(new LLamaModel(new ModelParams(modelPath))); +ChatSession session = new ChatSession(ex); +``` + +## Chat with the bot + +There'll be two kinds of input accepted by the `Chat` API, which are `ChatHistory` and `String`. The API with string is quite similar to that of the executors. Meanwhile, the API with `ChatHistory` is aimed to provide more flexible usages. For example, you have had a chat with the bot in session A before you open the session B. Now session B has no memory for what you said before. Therefore, you can feed the history of A to B. + +```cs +string prompt = "What is C#?"; + +foreach (var text in session.Chat(prompt, new InferenceParams() { Temperature = 0.6f, AntiPrompts = new List { "User:" } })) // the inference params should be changed depending on your statement +{ + Console.Write(text); +} +``` + +## Get the history + +Currently `History` is a property of `ChatSession`. + +```cs +foreach(var rec in session.History.Messages) +{ + Console.WriteLine($"{rec.AuthorRole}: {rec.Content}"); +} +``` diff --git a/docs/ChatSession/save-load-session.md b/docs/ChatSession/save-load-session.md new file mode 100644 index 00000000..415e15b5 --- /dev/null +++ b/docs/ChatSession/save-load-session.md @@ -0,0 +1,14 @@ +# Save/Load Chat Session + +Generally, the chat session could be switched, which requires the ability of loading and saving session. + +When building a chat bot app, it's **NOT encouraged** to initialize many chat sessions and keep them in memory to wait for being switched, because the memory comsumption of both CPU and GPU is expensive. It's recommended to save the current session before switching to a new session, and load the file when switching back to the session. + +The API is also quite simple, the files will be saved into a directory you specified. If the path does not exist, a new directory will be created. + +```cs +string savePath = ""; +session.SaveSession(savePath); + +session.LoadSession(savePath); +``` diff --git a/docs/ChatSession/transforms.md b/docs/ChatSession/transforms.md new file mode 100644 index 00000000..966749a3 --- /dev/null +++ b/docs/ChatSession/transforms.md @@ -0,0 +1,245 @@ +# Transforms in Chat Session + +There's three important elements in `ChatSession`, which are input, output and history. Besides, there're some conversions between them. Since the process of them under different conditions varies, LLamaSharp hands over this part of the power to the users. + +Currently, there're three kinds of process that could be customized, as introduced below. + +## Input transform + +In general, the input of the chat API is a text (without stream), therefore `ChatSession` processes it in a pipeline. If you want to use your customized transform, you need to define a transform that implements `ITextTransform` and add it to the pipeline of `ChatSession`. + +```cs +public interface ITextTransform +{ + string Transform(string text); +} +``` + +```cs +public class MyInputTransform1 : ITextTransform +{ + public string Transform(string text) + { + return $"Question: {text}\n"; + } +} + +public class MyInputTransform2 : ITextTransform +{ + public string Transform(string text) + { + return text + "Answer: "; + } +} + +session.AddInputTransform(new MyInputTransform1()).AddInputTransform(new MyInputTransform2()); +``` + +## Output transform + +Different from the input, the output of chat API is a text stream. Therefore you need to process it word by word, instead of getting the full text at once. + +The interface of it has an `IEnumerable` as input, which is actually a yield sequence. + +```cs +public interface ITextStreamTransform +{ + IEnumerable Transform(IEnumerable tokens); + IAsyncEnumerable TransformAsync(IAsyncEnumerable tokens); +} +``` + +When implementing it, you could throw a not-implemented exception in one of them if you only need to use the chat API in synchronously or asynchronously. + +Different from the input transform pipeline, the output transform only supports one transform. + +```cs +session.WithOutputTransform(new MyOutputTransform()); +``` + +Here's an example of how to implement the interface. In this example, the transform detects wether there's some keywords in the response and removes them. + +```cs +/// +/// A text output transform that removes the keywords from the response. +/// +public class KeywordTextOutputStreamTransform : ITextStreamTransform +{ + HashSet _keywords; + int _maxKeywordLength; + bool _removeAllMatchedTokens; + + /// + /// + /// + /// Keywords that you want to remove from the response. + /// The extra length when searching for the keyword. For example, if your only keyword is "highlight", + /// maybe the token you get is "\r\nhighligt". In this condition, if redundancyLength=0, the token cannot be successfully matched because the length of "\r\nhighligt" (10) + /// has already exceeded the maximum length of the keywords (8). On the contrary, setting redundancyLengyh >= 2 leads to successful match. + /// The larger the redundancyLength is, the lower the processing speed. But as an experience, it won't introduce too much performance impact when redundancyLength <= 5 + /// If set to true, when getting a matched keyword, all the related tokens will be removed. Otherwise only the part of keyword will be removed. + public KeywordTextOutputStreamTransform(IEnumerable keywords, int redundancyLength = 3, bool removeAllMatchedTokens = false) + { + _keywords = new(keywords); + _maxKeywordLength = keywords.Select(x => x.Length).Max() + redundancyLength; + _removeAllMatchedTokens = removeAllMatchedTokens; + } + /// + public IEnumerable Transform(IEnumerable tokens) + { + var window = new Queue(); + + foreach (var s in tokens) + { + window.Enqueue(s); + var current = string.Join("", window); + if (_keywords.Any(x => current.Contains(x))) + { + var matchedKeyword = _keywords.First(x => current.Contains(x)); + int total = window.Count; + for (int i = 0; i < total; i++) + { + window.Dequeue(); + } + if (!_removeAllMatchedTokens) + { + yield return current.Replace(matchedKeyword, ""); + } + } + if (current.Length >= _maxKeywordLength) + { + if (_keywords.Any(x => current.Contains(x))) + { + var matchedKeyword = _keywords.First(x => current.Contains(x)); + int total = window.Count; + for (int i = 0; i < total; i++) + { + window.Dequeue(); + } + if (!_removeAllMatchedTokens) + { + yield return current.Replace(matchedKeyword, ""); + } + } + else + { + int total = window.Count; + for (int i = 0; i < total; i++) + { + yield return window.Dequeue(); + } + } + } + } + int totalCount = window.Count; + for (int i = 0; i < totalCount; i++) + { + yield return window.Dequeue(); + } + } + /// + public async IAsyncEnumerable TransformAsync(IAsyncEnumerable tokens) + { + throw new NotImplementedException(); // This is implemented in `LLamaTransforms` but we ignore it here. + } +} +``` + +## History transform + +The chat history could be converted to or from a text, which is exactly what the interface of it. + +```cs +public interface IHistoryTransform +{ + string HistoryToText(ChatHistory history); + ChatHistory TextToHistory(AuthorRole role, string text); +} +``` + +Similar to the output transform, the history transform is added in the following way: + +```cs +session.WithHistoryTransform(new MyHistoryTransform()); +``` + +The implementation is quite flexible, depending on what you want the history message to be like. Here's an example, which is the default history transform in LLamaSharp. + +```cs +/// +/// The default history transform. +/// Uses plain text with the following format: +/// [Author]: [Message] +/// +public class DefaultHistoryTransform : IHistoryTransform +{ + private readonly string defaultUserName = "User"; + private readonly string defaultAssistantName = "Assistant"; + private readonly string defaultSystemName = "System"; + private readonly string defaultUnknownName = "??"; + + string _userName; + string _assistantName; + string _systemName; + string _unknownName; + bool _isInstructMode; + public DefaultHistoryTransform(string? userName = null, string? assistantName = null, + string? systemName = null, string? unknownName = null, bool isInstructMode = false) + { + _userName = userName ?? defaultUserName; + _assistantName = assistantName ?? defaultAssistantName; + _systemName = systemName ?? defaultSystemName; + _unknownName = unknownName ?? defaultUnknownName; + _isInstructMode = isInstructMode; + } + + public virtual string HistoryToText(ChatHistory history) + { + StringBuilder sb = new(); + foreach (var message in history.Messages) + { + if (message.AuthorRole == AuthorRole.User) + { + sb.AppendLine($"{_userName}: {message.Content}"); + } + else if (message.AuthorRole == AuthorRole.System) + { + sb.AppendLine($"{_systemName}: {message.Content}"); + } + else if (message.AuthorRole == AuthorRole.Unknown) + { + sb.AppendLine($"{_unknownName}: {message.Content}"); + } + else if (message.AuthorRole == AuthorRole.Assistant) + { + sb.AppendLine($"{_assistantName}: {message.Content}"); + } + } + return sb.ToString(); + } + + public virtual ChatHistory TextToHistory(AuthorRole role, string text) + { + ChatHistory history = new ChatHistory(); + history.AddMessage(role, TrimNamesFromText(text, role)); + return history; + } + + public virtual string TrimNamesFromText(string text, AuthorRole role) + { + if (role == AuthorRole.User && text.StartsWith($"{_userName}:")) + { + text = text.Substring($"{_userName}:".Length).TrimStart(); + } + else if (role == AuthorRole.Assistant && text.EndsWith($"{_assistantName}:")) + { + text = text.Substring(0, text.Length - $"{_assistantName}:".Length).TrimEnd(); + } + if (_isInstructMode && role == AuthorRole.Assistant && text.EndsWith("\n> ")) + { + text = text.Substring(0, text.Length - "\n> ".Length).TrimEnd(); + } + return text; + } +} +``` \ No newline at end of file diff --git a/docs/ContributingGuide.md b/docs/ContributingGuide.md new file mode 100644 index 00000000..f359bc87 --- /dev/null +++ b/docs/ContributingGuide.md @@ -0,0 +1,65 @@ +# LLamaSharp Contributing Guide + +Hi, welcome to develop LLamaSharp with us together! We are always open for every contributor and any format of contributions! If you want to maintain this library actively together, please contact us to get the write access after some PRs. (Email: AsakusaRinne@gmail.com) + +In this page, we'd like to introduce how to make contributions here easily. 😊 + +## Compile the native library from source + +Firstly, please clone the [llama.cpp](https://github.com/ggerganov/llama.cpp) repository and following the instructions in [llama.cpp readme](https://github.com/ggerganov/llama.cpp#build) to configure your local environment. + +If you want to support cublas in the compilation, please make sure that you've installed the cuda. + +When building from source, please add `-DBUILD_SHARED_LIBS=ON` to the cmake instruction. For example, when building with cublas but without openblas, use the following instruction: + +```bash +cmake .. -DLLAMA_CUBLAS=ON -DBUILD_SHARED_LIBS=ON +``` + +After running `cmake --build . --config Release`, you could find the `llama.dll`, `llama.so` or `llama.dylib` in your build directory. After pasting it to `LLamaSharp/LLama/runtimes` and renaming it to `libllama.dll`, `libllama.so` or `libllama.dylib`, you can use it as the native library in LLamaSharp. + + +## Add a new feature to LLamaSharp + +After refactoring the framework in `v0.4.0`, LLamaSharp will try to maintain the backward compatibility. However, in the following cases, break change is okay: + +1. Due to some break changes in [llama.cpp](https://github.com/ggerganov/llama.cpp), making a break change will help to maintain the good abstraction and friendly user APIs. +2. A very improtant feature cannot be implemented unless refactoring some parts. +3. After some discussions, an agreement was reached that making the break change is reasonable. + +If a new feature could be added without introducing any break change, please **open a PR** rather than open an issue first. We will never refuse the PR but help to improve it, unless it's malicious. + +When adding the feature, please take care of the namespace and the naming convention. For example, if you are adding an integration for WPF, please put the code under namespace `LLama.WPF` or `LLama.Integration.WPF` instead of putting it under the root namespace. The naming convention of LLamaSharp follows the pascal naming convention, but in some parts that are invisible to users, you can do whatever you want. + +## Find the problem and fix the BUG + +If the issue is related to the LLM internal behaviors, such as endless generating the response, the best way to find the problem is to do comparison test between llama.cpp and LLamaSharp. + +You could use exactly the same prompt, the same model and the same parameters to run the inference in llama.cpp and LLamaSharp respectively to see if it's really a problem caused by the implementation in LLamaSharp. + +If the experiment showed that it worked well in llama.cpp but didn't in LLamaSharp, a the search for the problem could be started. While the reason of the problem could be various, the best way I think is to add log-print in the code of llama.cpp and use it in LLamaSharp after compilation. Thus, when running LLamaSharp, you could see what happened in the native library. + +After finding out the reason, a painful but happy process comes. When working on the BUG fix, there's only one rule to follow, that is keeping the examples working well. If the modification fixed the BUG but impact on other functions, it would not be a good fix. + +During the BUG fix process, please don't hesitate to discuss together when you stuck on something. + +## Add integrations + +All kinds of integration are welcomed here! Currently the following integrations are under work or on our schedule: + +1. BotSharp +2. semantic-kernel +3. Unity + +Besides, for some other integrations, like `ASP.NET core`, `SQL`, `Blazor` and so on, we'll appreciate it if you could help with that. If the time is limited for you, providing an example for it also means a lot! + +## Add examples + +There're mainly two ways to add an example: + +1. Add the example to `LLama.Examples` of the repository. +2. Put the example in another repositpry and add the link to the readme or docs of LLamaSharp. + +## Add documents + +LLamaSharp uses [mkdocs](https://github.com/mkdocs/mkdocs) to build the documantation, please follow the tutorial of mkdocs to add or modify documents in LLamaSharp. \ No newline at end of file diff --git a/docs/GetStarted.md b/docs/GetStarted.md new file mode 100644 index 00000000..db46f2a3 --- /dev/null +++ b/docs/GetStarted.md @@ -0,0 +1,110 @@ +# Get Started + +## Install packages + +Firstly, search `LLamaSharp` in nuget package manager and install it. + +``` +PM> Install-Package LLamaSharp +``` + +Then, search and install one of the following backends: + +``` +LLamaSharp.Backend.Cpu +LLamaSharp.Backend.Cuda11 +LLamaSharp.Backend.Cuda12 +``` + +Here's the mapping of them and corresponding model samples provided by `LLamaSharp`. If you're not sure which model is available for a version, please try our sample model. + +| LLamaSharp.Backend | LLamaSharp | Verified Model Resources | llama.cpp commit id | +| - | - | -- | - | +| - | v0.2.0 | This version is not recommended to use. | - | +| - | v0.2.1 | [WizardLM](https://huggingface.co/TheBloke/wizardLM-7B-GGML/tree/previous_llama), [Vicuna (filenames with "old")](https://huggingface.co/eachadea/ggml-vicuna-13b-1.1/tree/main) | - | +| v0.2.2 | v0.2.2, v0.2.3 | [WizardLM](https://huggingface.co/TheBloke/wizardLM-7B-GGML/tree/previous_llama_ggmlv2), [Vicuna (filenames without "old")](https://huggingface.co/eachadea/ggml-vicuna-13b-1.1/tree/main) | 63d2046 | +| v0.3.0 | v0.3.0 | [LLamaSharpSamples v0.3.0](https://huggingface.co/AsakusaRinne/LLamaSharpSamples/tree/v0.3.0), [WizardLM](https://huggingface.co/TheBloke/wizardLM-7B-GGML/tree/main) | 7e4ea5b | + + +## Download a model + +One of the following models could be okay: + +- LLaMA 🦙 +- [Alpaca](https://github.com/ggerganov/llama.cpp#instruction-mode-with-alpaca) +- [GPT4All](https://github.com/ggerganov/llama.cpp#using-gpt4all) +- [Chinese LLaMA / Alpaca](https://github.com/ymcui/Chinese-LLaMA-Alpaca) +- [Vigogne (French)](https://github.com/bofenghuang/vigogne) +- [Vicuna](https://github.com/ggerganov/llama.cpp/discussions/643#discussioncomment-5533894) +- [Koala](https://bair.berkeley.edu/blog/2023/04/03/koala/) +- [OpenBuddy 🐶 (Multilingual)](https://github.com/OpenBuddy/OpenBuddy) +- [Pygmalion 7B / Metharme 7B](#using-pygmalion-7b--metharme-7b) +- [WizardLM](https://github.com/nlpxucan/WizardLM) + +**Note that because `llama.cpp` is under fast development now and often introduce break changes, some model weights on huggingface which works under a version may be invalid with another version. If it's your first time to configure LLamaSharp, we'd like to suggest for using verified model weights in the table above.** + +## Run the program + +Please create a console program with dotnet runtime >= netstandard 2.0 (>= net6.0 is more recommended). Then, paste the following code to `program.cs`; + +```cs +using LLama.Common; +using LLama; + +string modelPath = "" // change it to your own model path +var prompt = "Transcript of a dialog, where the User interacts with an Assistant named Bob. Bob is helpful, kind, honest, good at writing, and never fails to answer the User's requests immediately and with precision.\r\n\r\nUser: Hello, Bob.\r\nBob: Hello. How may I help you today?\r\nUser: Please tell me the largest city in Europe.\r\nBob: Sure. The largest city in Europe is Moscow, the capital of Russia.\r\nUser:"; // use the "chat-with-bob" prompt here. + +// Initialize a chat session +var ex = new InteractiveExecutor(new LLamaModel(new ModelParams(modelPath, contextSize: 1024, seed: 1337, gpuLayerCount: 5))); +ChatSession session = new ChatSession(ex); + +// show the prompt +Console.WriteLine(); +Console.Write(prompt); + +// run the inference in a loop to chat with LLM +while (true) +{ + foreach (var text in session.Chat(prompt, new InferenceParams() { Temperature = 0.6f, AntiPrompts = new List { "User:" } })) + { + Console.Write(text); + } + + Console.ForegroundColor = ConsoleColor.Green; + prompt = Console.ReadLine(); + Console.ForegroundColor = ConsoleColor.White; +} +``` + +After starting it, you'll see the following outputs. + +``` +Please input your model path: D:\development\llama\weights\wizard-vicuna-13B.ggmlv3.q4_1.bin +llama.cpp: loading model from D:\development\llama\weights\wizard-vicuna-13B.ggmlv3.q4_1.bin +llama_model_load_internal: format = ggjt v3 (latest) +llama_model_load_internal: n_vocab = 32000 +llama_model_load_internal: n_ctx = 1024 +llama_model_load_internal: n_embd = 5120 +llama_model_load_internal: n_mult = 256 +llama_model_load_internal: n_head = 40 +llama_model_load_internal: n_layer = 40 +llama_model_load_internal: n_rot = 128 +llama_model_load_internal: ftype = 3 (mostly Q4_1) +llama_model_load_internal: n_ff = 13824 +llama_model_load_internal: n_parts = 1 +llama_model_load_internal: model size = 13B +llama_model_load_internal: ggml ctx size = 7759.48 MB +llama_model_load_internal: mem required = 9807.48 MB (+ 1608.00 MB per state) +.................................................................................................... +llama_init_from_file: kv self size = 800.00 MB + +Transcript of a dialog, where the User interacts with an Assistant named Bob. Bob is helpful, kind, honest, good at writing, and never fails to answer the User's requests immediately and with precision. + +User: Hello, Bob. +Bob: Hello. How may I help you today? +User: Please tell me the largest city in Europe. +Bob: Sure. The largest city in Europe is Moscow, the capital of Russia. +User: +``` + +Now, enjoy chatting with LLM! \ No newline at end of file diff --git a/docs/HighLevelApps/bot-sharp.md b/docs/HighLevelApps/bot-sharp.md new file mode 100644 index 00000000..7dfbb28a --- /dev/null +++ b/docs/HighLevelApps/bot-sharp.md @@ -0,0 +1,3 @@ +# The Usage of BotSharp Integration + +The document is under work, please have a wait. Thank you for your support! :) \ No newline at end of file diff --git a/docs/LLamaExecutors/differences.md b/docs/LLamaExecutors/differences.md new file mode 100644 index 00000000..324a7fae --- /dev/null +++ b/docs/LLamaExecutors/differences.md @@ -0,0 +1,69 @@ +## Differences between the executors + +There're currently three kinds of executors provided, which are `InteractiveExecutor`, `InstructExecutor` and `StatelessExecutor`. + +In a word, `InteractiveExecutor` is suitable for getting answer of your questions from LLM continuously. `InstructExecutor` let LLM execute your instructions, such as "continue writing". `StatelessExecutor` is best for one-time job because the previous inference has no impact on the current inference. + + +## Interactive mode & Instruct mode + +Both of them are taking "completing the prompt" as the goal to generate the response. For example, if you input `Long long ago, there was a fox who wanted to make friend with humen. One day`, then the LLM will continue to write the story. + +Under interactive mode, you serve a role of user and the LLM serves the role of assistant. Then it will help you with your question or request. + +Under instruct mode, you give LLM some instructions and it follows. + +Though the behaviors of them sounds similar, it could introduce many differences depending on your prompt. For example, "chat-with-bob" has good performance under interactive mode and `alpaca` does well with instruct mode. + +``` +// chat-with-bob + +Transcript of a dialog, where the User interacts with an Assistant named Bob. Bob is helpful, kind, honest, good at writing, and never fails to answer the User's requests immediately and with precision. + +User: Hello, Bob. +Bob: Hello. How may I help you today? +User: Please tell me the largest city in Europe. +Bob: Sure. The largest city in Europe is Moscow, the capital of Russia. +User: +``` + +``` +// alpaca + +Below is an instruction that describes a task. Write a response that appropriately completes the request. +``` + +Therefore, please modify the prompt correspondingly when switching from one mode to the other. + +## Stateful mode and Stateless mode. + +Despite the differences between interactive mode and instruct mode, both of them are stateful mode. That is, your previous question/instruction will impact on the current response from LLM. On the contrary, the steteless executor does not have such a "memory". No matter how many times you talk to it, it will only concentrate on what you say in this time. + +Since the stateless executor has no memory of conversations before, you need to input your question with the whole prompt into it to get the better answer. + +For example, if you feed `Q: Who is Trump? A: ` to the steteless executor, it may give the following answer with the antiprompt `Q: `. + +``` +Donald J. Trump, born June 14, 1946, is an American businessman, television personality, politician and the 45th President of the United States (2017-2021). # Anexo:Torneo de Hamburgo 2022 (individual masculino) + +## Presentación previa + +* Defensor del título: Daniil Medvédev +``` + +It seems that things went well at first. However, after answering the question itself, LLM began to talk about some other things until the answer reached the token count limit. The reason of this strange behavior is the anti-prompt cannot be match. With the input, LLM cannot decide whether to append a string "A: " at the end of the response. + +As an improvement, let's take the following text as the input: + +``` +Q: What is the capital of the USA? A: Washingtong. Q: What is the sum of 1 and 2? A: 3. Q: Who is Trump? A: +``` + +Then, I got the following answer with the anti-prompt `Q: `. + +``` +45th president of the United States. +``` + +At this time, by repeating the same mode of `Q: xxx? A: xxx.`, LLM outputs the anti-prompt we want to help to decide where to dtop the generation. + diff --git a/docs/LLamaExecutors/parameters.md b/docs/LLamaExecutors/parameters.md new file mode 100644 index 00000000..517d1db5 --- /dev/null +++ b/docs/LLamaExecutors/parameters.md @@ -0,0 +1,261 @@ +# Inference Parameters + +Different from `LLamaModel`, when using an exeuctor, `InferenceParams` is passed to the `Infer` method instead of constructor. This is because executors only define the ways to run the model, therefore in each run, you can change the settings for this time inference. + + +# InferenceParams + +Namespace: LLama.Common + +```csharp +public class InferenceParams +``` + +Inheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [InferenceParams]() + +## Properties + +### **TokensKeep** + +number of tokens to keep from initial prompt + +```csharp +public int TokensKeep { get; set; } +``` + +#### Property Value + +[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)
+ +### **MaxTokens** + +how many new tokens to predict (n_predict), set to -1 to inifinitely generate response + until it complete. + +```csharp +public int MaxTokens { get; set; } +``` + +#### Property Value + +[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)
+ +### **LogitBias** + +logit bias for specific tokens + +```csharp +public Dictionary LogitBias { get; set; } +``` + +#### Property Value + +[Dictionary<Int32, Single>](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2)
+ +### **AntiPrompts** + +Sequences where the model will stop generating further tokens. + +```csharp +public IEnumerable AntiPrompts { get; set; } +``` + +#### Property Value + +[IEnumerable<String>](https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1)
+ +### **PathSession** + +path to file for saving/loading model eval state + +```csharp +public string PathSession { get; set; } +``` + +#### Property Value + +[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)
+ +### **InputSuffix** + +string to suffix user inputs with + +```csharp +public string InputSuffix { get; set; } +``` + +#### Property Value + +[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)
+ +### **InputPrefix** + +string to prefix user inputs with + +```csharp +public string InputPrefix { get; set; } +``` + +#### Property Value + +[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)
+ +### **TopK** + +0 or lower to use vocab size + +```csharp +public int TopK { get; set; } +``` + +#### Property Value + +[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)
+ +### **TopP** + +1.0 = disabled + +```csharp +public float TopP { get; set; } +``` + +#### Property Value + +[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)
+ +### **TfsZ** + +1.0 = disabled + +```csharp +public float TfsZ { get; set; } +``` + +#### Property Value + +[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)
+ +### **TypicalP** + +1.0 = disabled + +```csharp +public float TypicalP { get; set; } +``` + +#### Property Value + +[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)
+ +### **Temperature** + +1.0 = disabled + +```csharp +public float Temperature { get; set; } +``` + +#### Property Value + +[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)
+ +### **RepeatPenalty** + +1.0 = disabled + +```csharp +public float RepeatPenalty { get; set; } +``` + +#### Property Value + +[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)
+ +### **RepeatLastTokensCount** + +last n tokens to penalize (0 = disable penalty, -1 = context size) (repeat_last_n) + +```csharp +public int RepeatLastTokensCount { get; set; } +``` + +#### Property Value + +[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)
+ +### **FrequencyPenalty** + +frequency penalty coefficient + 0.0 = disabled + +```csharp +public float FrequencyPenalty { get; set; } +``` + +#### Property Value + +[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)
+ +### **PresencePenalty** + +presence penalty coefficient + 0.0 = disabled + +```csharp +public float PresencePenalty { get; set; } +``` + +#### Property Value + +[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)
+ +### **Mirostat** + +Mirostat uses tokens instead of words. + algorithm described in the paper https://arxiv.org/abs/2007.14966. + 0 = disabled, 1 = mirostat, 2 = mirostat 2.0 + +```csharp +public MiroStateType Mirostat { get; set; } +``` + +#### Property Value + +[MiroStateType]()
+ +### **MirostatTau** + +target entropy + +```csharp +public float MirostatTau { get; set; } +``` + +#### Property Value + +[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)
+ +### **MirostatEta** + +learning rate + +```csharp +public float MirostatEta { get; set; } +``` + +#### Property Value + +[Single](https://docs.microsoft.com/en-us/dotnet/api/system.single)
+ +### **PenalizeNL** + +consider newlines as a repeatable token (penalize_nl) + +```csharp +public bool PenalizeNL { get; set; } +``` + +#### Property Value + +[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)
\ No newline at end of file diff --git a/docs/LLamaExecutors/save-load-state.md b/docs/LLamaExecutors/save-load-state.md new file mode 100644 index 00000000..3af6a8c7 --- /dev/null +++ b/docs/LLamaExecutors/save-load-state.md @@ -0,0 +1,27 @@ +# Save/Load State of Executor + +Similar to `LLamaModel`, an executor also has its state, which can be saved and loaded. **Note that in most of cases, the state of executor and the state of the model should be loaded and saved at the same time.** + +To decouple the model and executor, we provide APIs to save/load state for model and executor respectively. However, during the inference, the processed information will leave footprint in `LLamaModel`'s native context. Therefore, if you just load a state from another executor but keep the model unmodified, some strange things may happen. So will loading model state only. + +Is there a condition that requires to load one of them only? The answer is YES. For example, after resetting the model state, if you don't want the inference starting from the new position, leaving the executor unmodified is okay. But, anyway, this flexible usage may cause some unexpected behaviors, therefore please ensure you know what you're doing before using it in this way. + +In the future version, we'll open the access for some variables inside the executor to support more flexible usages. + +The APIs to load/save state of the executors is similar to that of `LLamaModel`. However, note that `StatelessExecutor` doesn't have such APIs because it's stateless itself. Besides, the output of `GetStateData` is an object of type `ExecutorBaseState`. + +```cs +LLamaModel model = new LLamaModel(new ModelParams("")); +InteractiveExecutor executor = new InteractiveExecutor(model); +// do some things... +executor.SaveState("executor.st"); +var stateData = model.GetStateData(); + +InteractiveExecutor executor2 = new InteractiveExecutor(model); +executor2.LoadState(stateData); +// do some things... + +InteractiveExecutor executor3 = new InteractiveExecutor(model); +executor3.LoadState("executor.st"); +// do some things... +``` \ No newline at end of file diff --git a/docs/LLamaExecutors/text-to-text-apis.md b/docs/LLamaExecutors/text-to-text-apis.md new file mode 100644 index 00000000..eeb2440c --- /dev/null +++ b/docs/LLamaExecutors/text-to-text-apis.md @@ -0,0 +1,18 @@ +# Text-to-Text APIs of the executors + +All the executors implements the interface `ILLamaExecutor`, which provides two APIs to execute text-to-text tasks. + +```cs +public interface ILLamaExecutor +{ + public LLamaModel Model { get; } + + IEnumerable Infer(string text, InferenceParams? inferenceParams = null, CancellationToken token = default); + + IAsyncEnumerable InferAsync(string text, InferenceParams? inferenceParams = null, CancellationToken token = default); +} +``` + +Just pass the text to the executor with the inference parameters. For the inference parameters, please refer to [executor inference parameters doc](./parameters.md). + +The output of both two APIs are **yield enumerable**. Therefore, when receiving the output, you can directly use `foreach` to take actions on each word you get by order, instead of waiting for the whole process completed. \ No newline at end of file diff --git a/docs/LLamaModel/embeddings.md b/docs/LLamaModel/embeddings.md new file mode 100644 index 00000000..6f4b6677 --- /dev/null +++ b/docs/LLamaModel/embeddings.md @@ -0,0 +1,13 @@ +# Get Embeddings + +Getting the embeddings of a text in LLM is sometimes useful, for example, to train other MLP models. + +To get the embeddings, please initialize a `LLamaEmbedder` and then call `GetEmbeddings`. + +```cs +var embedder = new LLamaEmbedder(new ModelParams("")); +string text = "hello, LLM."; +float[] embeddings = embedder.GetEmbeddings(text); +``` + +The output is a float array. Note that the length of the array is related with the model you load. If you just want to get a smaller size embedding, please consider changing a model. \ No newline at end of file diff --git a/docs/LLamaModel/parameters.md b/docs/LLamaModel/parameters.md new file mode 100644 index 00000000..760893a2 --- /dev/null +++ b/docs/LLamaModel/parameters.md @@ -0,0 +1,208 @@ +# LLamaModel Parameters + +When initializing a `LLamaModel` object, there're three parameters, `ModelParams Params, string encoding = "UTF-8", ILLamaLogger? logger = null`. + +The usage of `logger` will be further introduced in [logger doc](../More/log.md). The `encoding` is the encoding you want to use when dealing with text via this model. + +The most improtant of all, is the `ModelParams`, which is defined as below. We'll explain the parameters step by step in this document. + +```cs +public class ModelParams +{ + public int ContextSize { get; set; } = 512; + public int GpuLayerCount { get; set; } = 20; + public int Seed { get; set; } = 1686349486; + public bool UseFp16Memory { get; set; } = true; + public bool UseMemorymap { get; set; } = true; + public bool UseMemoryLock { get; set; } = false; + public bool Perplexity { get; set; } = false; + public string ModelPath { get; set; } + public string LoraAdapter { get; set; } = string.Empty; + public string LoraBase { get; set; } = string.Empty; + public int Threads { get; set; } = Math.Max(Environment.ProcessorCount / 2, 1); + public int BatchSize { get; set; } = 512; + public bool ConvertEosToNewLine { get; set; } = false; +} +``` + + +# ModelParams + +Namespace: LLama.Common + +```csharp +public class ModelParams +``` + +Inheritance [Object](https://docs.microsoft.com/en-us/dotnet/api/system.object) → [ModelParams]() + +## Properties + +### **ContextSize** + +Model context size (n_ctx) + +```csharp +public int ContextSize { get; set; } +``` + +#### Property Value + +[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)
+ +### **GpuLayerCount** + +Number of layers to run in VRAM / GPU memory (n_gpu_layers) + +```csharp +public int GpuLayerCount { get; set; } +``` + +#### Property Value + +[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)
+ +### **Seed** + +Seed for the random number generator (seed) + +```csharp +public int Seed { get; set; } +``` + +#### Property Value + +[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)
+ +### **UseFp16Memory** + +Use f16 instead of f32 for memory kv (memory_f16) + +```csharp +public bool UseFp16Memory { get; set; } +``` + +#### Property Value + +[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)
+ +### **UseMemorymap** + +Use mmap for faster loads (use_mmap) + +```csharp +public bool UseMemorymap { get; set; } +``` + +#### Property Value + +[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)
+ +### **UseMemoryLock** + +Use mlock to keep model in memory (use_mlock) + +```csharp +public bool UseMemoryLock { get; set; } +``` + +#### Property Value + +[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)
+ +### **Perplexity** + +Compute perplexity over the prompt (perplexity) + +```csharp +public bool Perplexity { get; set; } +``` + +#### Property Value + +[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)
+ +### **ModelPath** + +Model path (model) + +```csharp +public string ModelPath { get; set; } +``` + +#### Property Value + +[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)
+ +### **LoraAdapter** + +lora adapter path (lora_adapter) + +```csharp +public string LoraAdapter { get; set; } +``` + +#### Property Value + +[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)
+ +### **LoraBase** + +base model path for the lora adapter (lora_base) + +```csharp +public string LoraBase { get; set; } +``` + +#### Property Value + +[String](https://docs.microsoft.com/en-us/dotnet/api/system.string)
+ +### **Threads** + +Number of threads (-1 = autodetect) (n_threads) + +```csharp +public int Threads { get; set; } +``` + +#### Property Value + +[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)
+ +### **BatchSize** + +batch size for prompt processing (must be >=32 to use BLAS) (n_batch) + +```csharp +public int BatchSize { get; set; } +``` + +#### Property Value + +[Int32](https://docs.microsoft.com/en-us/dotnet/api/system.int32)
+ +### **ConvertEosToNewLine** + +Whether to convert eos to newline during the inference. + +```csharp +public bool ConvertEosToNewLine { get; set; } +``` + +#### Property Value + +[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)
+ +### **EmbeddingMode** + +Whether to use embedding mode. (embedding) Note that if this is set to true, + The LLamaModel won't produce text response anymore. + +```csharp +public bool EmbeddingMode { get; set; } +``` + +#### Property Value + +[Boolean](https://docs.microsoft.com/en-us/dotnet/api/system.boolean)
diff --git a/docs/LLamaModel/quantization.md b/docs/LLamaModel/quantization.md new file mode 100644 index 00000000..b3bf93b4 --- /dev/null +++ b/docs/LLamaModel/quantization.md @@ -0,0 +1,23 @@ +# Quantization + +Quantization is significant to accelerate the model inference. Since there's little accuracy (performance) reduction when quantizing the model, get it easy to quantize it! + +To quantize the model, please call `Quantize` from `LLamaQuantizer`, which is a static method. + +```cs +string srcPath = ""; +string dstPath = ""; +LLamaQuantizer.Quantize(srcPath, dstPath, "q4_0"); +// The following overload is also okay. +// LLamaQuantizer.Quantize(srcPath, dstPath, LLamaFtype.LLAMA_FTYPE_MOSTLY_Q4_0); +``` + +After calling it, a quantized model file will be saved. + +There're currently 5 types of quantization supported: + +- q4_0 +- q4_1 +- q5_0 +- q5_1 +- q8_0 \ No newline at end of file diff --git a/docs/LLamaModel/save-load-state.md b/docs/LLamaModel/save-load-state.md new file mode 100644 index 00000000..76cacc7c --- /dev/null +++ b/docs/LLamaModel/save-load-state.md @@ -0,0 +1,19 @@ +# Save/Load State + +There're two ways to load state: loading from path and loading from bite array. Therefore, correspondingly, state data can be extracted as byte array or saved to a file. + +```cs +LLamaModel model = new LLamaModel(new ModelParams("")); +// do some things... +model.SaveState("model.st"); +var stateData = model.GetStateData(); +model.Dispose(); + +LLamaModel model2 = new LLamaModel(new ModelParams("")); +model2.LoadState(stateData); +// do some things... + +LLamaModel model3 = new LLamaModel(new ModelParams("")); +model3.LoadState("model.st"); +// do some things... +``` \ No newline at end of file diff --git a/docs/LLamaModel/tokenization.md b/docs/LLamaModel/tokenization.md new file mode 100644 index 00000000..aadff33a --- /dev/null +++ b/docs/LLamaModel/tokenization.md @@ -0,0 +1,25 @@ +# Tokenization/Detokenization + +A pair of APIs to make conversion between text and tokens. + +## Tokenization + +The basic usage is to call `Tokenize` after initializing the model. + +```cs +LLamaModel model = new LLamaModel(new ModelParams("")); +string text = "hello"; +int[] tokens = model.Tokenize(text).ToArray(); +``` + +Depending on different model (or vocab), the output will be various. + +## Detokenization + +Similar to tokenization, just pass an `IEnumerable` to `Detokenize` method. + +```cs +LLamaModel model = new LLamaModel(new ModelParams("")); +int[] tokens = new int[] {125, 2568, 13245}; +string text = model.Detokenize(tokens); +``` diff --git a/docs/More/log.md b/docs/More/log.md new file mode 100644 index 00000000..660f497b --- /dev/null +++ b/docs/More/log.md @@ -0,0 +1,163 @@ +# The Logger in LLamaSharp + +LLamaSharp supports customized logger because it could be used in many kinds of applications, like Winform/WPF, WebAPI and Blazor, so that the preference of logger varies. + +## Define customized logger + +What you need to do is to implement the `ILogger` interface. + +```cs +public interface ILLamaLogger +{ + public enum LogLevel + { + Info, + Debug, + Warning, + Error + } + void Log(string source, string message, LogLevel level); +} +``` + +The `source` specifies where the log message is from, which could be a function, a class, etc.. + +The `message` is the log message itself. + +The `level` is the level of the information in the log. As shown above, there're four levels, which are `info`, `debug`, `warning` and `error` respectively. + +The following is a simple example of theb logger implementation: + +```cs +public sealed class LLamaDefaultLogger : ILLamaLogger +{ + private static readonly Lazy _instance = new Lazy(() => new LLamaDefaultLogger()); + + private bool _toConsole = true; + private bool _toFile = false; + + private FileStream? _fileStream = null; + private StreamWriter _fileWriter = null; + + public static LLamaDefaultLogger Default => _instance.Value; + + private LLamaDefaultLogger() + { + + } + + public LLamaDefaultLogger EnableConsole() + { + _toConsole = true; + return this; + } + + public LLamaDefaultLogger DisableConsole() + { + _toConsole = false; + return this; + } + + public LLamaDefaultLogger EnableFile(string filename, FileMode mode = FileMode.Append) + { + _fileStream = new FileStream(filename, mode, FileAccess.Write); + _fileWriter = new StreamWriter(_fileStream); + _toFile = true; + return this; + } + + public LLamaDefaultLogger DisableFile(string filename) + { + if (_fileWriter is not null) + { + _fileWriter.Close(); + _fileWriter = null; + } + if (_fileStream is not null) + { + _fileStream.Close(); + _fileStream = null; + } + _toFile = false; + return this; + } + + public void Log(string source, string message, LogLevel level) + { + if (level == LogLevel.Info) + { + Info(message); + } + else if (level == LogLevel.Debug) + { + + } + else if (level == LogLevel.Warning) + { + Warn(message); + } + else if (level == LogLevel.Error) + { + Error(message); + } + } + + public void Info(string message) + { + message = MessageFormat("info", message); + if (_toConsole) + { + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine(message); + Console.ResetColor(); + } + if (_toFile) + { + Debug.Assert(_fileStream is not null); + Debug.Assert(_fileWriter is not null); + _fileWriter.WriteLine(message); + } + } + + public void Warn(string message) + { + message = MessageFormat("warn", message); + if (_toConsole) + { + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(message); + Console.ResetColor(); + } + if (_toFile) + { + Debug.Assert(_fileStream is not null); + Debug.Assert(_fileWriter is not null); + _fileWriter.WriteLine(message); + } + } + + public void Error(string message) + { + message = MessageFormat("error", message); + if (_toConsole) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(message); + Console.ResetColor(); + } + if (_toFile) + { + Debug.Assert(_fileStream is not null); + Debug.Assert(_fileWriter is not null); + _fileWriter.WriteLine(message); + } + } + + private string MessageFormat(string level, string message) + { + DateTime now = DateTime.Now; + string formattedDate = now.ToString("yyyy.MM.dd HH:mm:ss"); + return $"[{formattedDate}][{level}]: {message}"; + } +} +``` \ No newline at end of file diff --git a/docs/NonEnglishUsage/Chinese.md b/docs/NonEnglishUsage/Chinese.md new file mode 100644 index 00000000..2d03f3bc --- /dev/null +++ b/docs/NonEnglishUsage/Chinese.md @@ -0,0 +1,3 @@ +# Use LLamaSharp with Chinese + +It's supported now but the document is under work. Please wait for some time. Thank you for your support! :) \ No newline at end of file diff --git a/docs/Tricks.md b/docs/Tricks.md new file mode 100644 index 00000000..456f0ddc --- /dev/null +++ b/docs/Tricks.md @@ -0,0 +1,44 @@ +# Tricks for FAQ + +Sometimes, your application with LLM and LLamaSharp may have strange behaviors. Before opening an issue to report the BUG, the following tricks may worth a try. + + +## Carefully set the anti-prompts + +Anti-prompt can also be called as "Stop-keyword", which decides when to stop the response generation. Under interactive mode, the maximum tokens count is always not set, which makes the LLM generates responses infinitively. Therefore, setting anti-prompt correctly helps a lot to avoid the strange behaviors. For example, the prompt file `chat-with-bob.txt` has the following content: + +``` +Transcript of a dialog, where the User interacts with an Assistant named Bob. Bob is helpful, kind, honest, good at writing, and never fails to answer the User's requests immediately and with precision. + +User: Hello, Bob. +Bob: Hello. How may I help you today? +User: Please tell me the largest city in Europe. +Bob: Sure. The largest city in Europe is Moscow, the capital of Russia. +User: +``` + +Therefore, the anti-prompt should be set as "User:". If the last line of the prompt is removed, LLM will automatically generate a question (user) and a response (bob) for one time when running the chat session. Therefore, the antiprompt is suggested to be appended to the prompt when starting a chat session. + +What if an extra line is appended? The string "User:" in the prompt will be followed with a char "\n". Thus when running the model, the automatic generation of a pair of question and response may appear because the anti-prompt is "User:" but the last token is "User:\n". As for whether it will appear, it's an undefined behavior, which depends on the implementation inside the `LLamaExecutor`. Anyway, since it may leads to unexpected behaviors, it's recommended to trim your prompt or carefully keep consistent with your anti-prompt. + +## Pay attention to the length of prompt + +Sometimes we want to input a long prompt to execute a task. However, the context size may limit the inference of LLama model. Please ensure the inequality below holds. + +$$ len(prompt) + len(response) < len(context) $$ + +In this inequality, `len(response)` refers to the expected tokens for LLM to generate. + +## Try differenct executors with a prompt + +Some prompt works well under interactive mode, such as `chat-with-bob`, some others may work well with instruct mode, such as `alpaca`. Besides, if your input is quite simple and one-time job, such as "Q: what is the satellite of the earth? A: ", stateless mode will be a good choice. + +If your chat bot has bad performance, trying different executor will possibly make it work well. + +## Choose models weight depending on you task + +The differences between modes may lead to much different behaviors under the same task. For example, if you're building a chat bot with non-English, a fine-tuned model specially for the language you want to use will have huge effect on the performance. + +## Set the layer count you want to offload to GPU + +Currently, the `GpuLayerCount` param, which decides the number of layer loaded into GPU, is set to 20 by default. However, if you have some efficient GPUs, setting it as a larger number will attain faster inference. \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..798cab06 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,36 @@ +# Overview + +![logo](./media/LLamaSharpLogo.png) + +LLamaSharp is the C#/.NET binding of [llama.cpp](https://github.com/ggerganov/llama.cpp). It provides APIs to inference the LLaMa Models and deploy it on native environment or Web. It could help C# developers to deploy the LLM (Large Language Model) locally and integrate with C# apps. + +## Main features + +- Model inference +- Model quantization +- Generating embeddings +- Interactive/Instruct/Stateless executor mode +- Chat session APIs +- Save/load the state +- Integration with other applications like BotSharp and semantic-kernel + +## Essential insights for novice learners + +If you are new to LLM, here're some tips for you to help you to get start with `LLamaSharp`. If you are experienced in this field, we'd still recommend you to take a few minutes to read it because somethings performs differently compared to cpp/python. + +1. Tha main ability of LLamaSharp is to provide an efficient way to run inference of LLM (Large Language Model) locally (and fine-tune model in the future). The model weights, however, needs to be downloaded from other resources, like [huggingface](https://huggingface.co). +2. Since LLamaSharp supports multiple platforms, The nuget package is splitted to `LLamaSharp` and `LLama.Backend`. After installing `LLamaSharp`, please install one of `LLama.Backend.Cpu`, `LLama.Backend.Cuda11` and `LLama.Backend.Cuda12`. If you use the source code, dynamic libraries could be found in `LLama/Runtimes`. Then rename the one you want to use to `libllama.dll`. +3. `LLaMa` originally refers to the weights released by Meta (Facebook Research). After that, many models are fine-tuned based on it, such as `Vicuna`, `GPT4All`, and `Pyglion`. Though all of these models are supported by LLamaSharp, some steps are necessary with different file formats. There're mainly three kinds of files, which are `.pth`, `.bin (ggml)`, `.bin (quantized)`. If you have the `.bin (quantized)` file, it could be used directly by LLamaSharp. If you have the `.bin (ggml)` file, you could use it directly but get higher inference speed after the quantization. If you have the `.pth` file, you need to follow [the instructions in llama.cpp](https://github.com/ggerganov/llama.cpp#prepare-data--run) to convert it to `.bin (ggml)` file at first. +4. LLamaSharp supports GPU acceleration, but it requires cuda installation. Please install cuda 11 or cuda 12 on your system before using LLamaSharp to enable GPU. If you have another cuda version, you could compile llama.cpp from source to get the dll. For building from source, please refer to [issue #5](https://github.com/SciSharp/LLamaSharp/issues/5). + +## Welcome to join the development! + +Community effort is always one of the most important things in open-source projects. Any contribution in any way is welcomed here. For example, the following things mean a lot for LLamaSharp: + +1. Open an issue when you find something wrong. +2. Open an PR if you've fixed something. Even if just correcting a typo, it also makes great sense. +3. Help to optimize the documentation. +4. Write an example or blog about how to integrate LLamaSharp with your APPs. +5. Ask for a missed feature and discuss with other developers. + +If you'd like to get deeply involved in development, please touch us in discord channel or send email to `AsakusaRinne@gmail.com`. :) diff --git a/docs/media/LLamaSharpLogo.png b/docs/media/LLamaSharpLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..62df789a6364461e9cbc09724e1c60caffc03759 GIT binary patch literal 41408 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 jdHK=w@w?-1Z$lc3{Ka|a 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
  • L52Od^dFbR2oW2{ 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 NPb^rtEg$kA{|gO6ZXo~w literal 0 HcmV?d00001 diff --git a/docs/media/structure.jpg b/docs/media/structure.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0b708bc6f4369b6036b4f7d98fcb37697e09a2b GIT binary patch literal 164821 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

    iLh@<%WgKg?M+RYI1#=VqjDQ5+r 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Ï*EU*mnrQuL`D3T?K>sH8c(}53mX*9&_6-h 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%0A}N5%sgF!M#^?AVf=xl3 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%0AGs8%bR|4Bm{>hQaQ#vpjd>c&W{ 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 literal 0 HcmV?d00001 diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..c2b69435 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,29 @@ +site_name: LLamaSharp Documentation +nav: + - Overview: index.md + - Get Started: GetStarted.md + - Architecher: Architecher.md + - Tricks for FAQ: Tricks.md + - Contributing Guide: ContributingGuide.md + - LLamaModel: + - Model Parameters: LLamaModel/parameters.md + - Tokenization: LLamaModel/tokenization.md + - Get Embeddings: LLamaModel/embeddings.md + - Quantization: LLamaModel/quantization.md + - Save/Load State: LLamaModel/save-load-state.md + - LLamaExecutors: + - Inference Parameters: LLamaExecutors/parameters.md + - Text-to-Text APIs: LLamaExecutors/text-to-text-apis.md + - Save/Load State: LLamaExecutors/save-load-state.md + - Differences of Executors: LLamaExecutors/differences.md + - ChatSession: + - Basic Usages: ChatSession/basic-usages.md + - Transoforms: ChatSession/transforms.md + - Save/Load Session: ChatSession/save-load-session.md + - Non-English Usages: + - Chinese: NonEnglishUsage/Chinese.md + - High-level Applications: + - BotSharp: HighLevelApps/bot-sharp.md + - More: + - Logger: More/log.md +theme: readthedocs \ No newline at end of file