深入浅出LLamaSharp:打造智能.NET应用,不需GPU也能玩转LLaMA模型

AI 3个月前 admin
18 0 0

        在如今的.NET社区中,机器学习和人工智能的应用越来越普遍。今天我要给大家推荐一个名叫LLamaSharp的开源项目。这是llama.cppC#/.NET绑定,提供了高级的API,使得我们能在本地设备上使用C#/.NET 推理LLaMA模型,并且部署它。

        LLamaSharp支持在Windows、Linux和Mac上运行,无需自己编译llama.cpp。即便在没有GPU或者GPU内存不足的情况下,也能够使用LLaMA模型,这是非常让人兴奋的一点!

        此外,LLamaSharp还提供了与其他项目如semantic-kernel、kernel-memoryBotSharp的集成,以提供更高层次的应用程序。


安装步骤

首先,在NuGet中安装LLamaSharp包:

PM> Install-Package LLamaSharp

然后,根据您的需要安装以下后端之一:

  • LLamaSharp.Backend.Cpu:适用于Windows和Linux的纯CPU,以及适用于Mac的Metal。

  • LLamaSharp.Backend.Cuda11:适用于Windows和Linux的CUDA11。

  • LLamaSharp.Backend.Cuda12:适用于Windows和Linux的CUDA12。

如果这些后端都不适合您的需求,您可以自己编译llama.cpp。在这种情况下,请不要安装后端包!而是将您编译的DLL添加到您的项目中,并确保在编译项目时能够将其复制到输出目录。如果要这样做,您必须使用正确的llama.cpp提交版本,请参考下方的版本表格。

(可选)对于Microsoft semantic-kernel集成,请安装LLamaSharp.semantic-kernel包。

PM> Install-Package LLamaSharp.semantic-kernel

(可选)对于Microsoft kernel-memory集成,请安装LLamaSharp.kernel-memory包(这个包当前只支持net6.0)。

PM> Install-Package LLamaSharp.kernel-memory


选择版本的建议

        由于llama.cpp是一个变动频繁并且常有重大变更的项目,因此LLamaSharp也经常会有突破性的更改。LLamaSharp遵循语义化版本控制,并且不会在补丁版本中引入API的重大变更。

建议尽快更新到最新的补丁版本,同时也尽快更新到新的主版本。


快速开始-模型推理和聊天会话

        LLamaSharp提供了两种运行推理的方式:LLamaExecutor和ChatSession。ChatSession是对executor和模型的更高级别的封装。下面是一个使用chat session的简单示例。

using LLama.Common;using LLama;
string modelPath = "<Your 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.rnrnUser: Hello, Bob.rnBob: Hello. How may I help you today?rnUser: Please tell me the largest city in Europe.rnBob: Sure. The largest city in Europe is Moscow, the capital of Russia.rnUser:"; // 这里使用“chat-with-bob”提示。
// 加载模型var parameters = new ModelParams(modelPath){ ContextSize = 1024, Seed = 1337, GpuLayerCount = 5};using var model = LLamaWeights.LoadFromFile(parameters);
// 初始化一个聊天会话using var context = model.CreateContext(parameters);var ex = new InteractiveExecutor(context);ChatSession session = new ChatSession(ex);
// 展示提示内容Console.WriteLine();Console.Write(prompt);
// 循环运行推理,与LLM聊天while (prompt != "stop"){ await foreach (var text in session.ChatAsync(new ChatHistory.Message(AuthorRole.User, prompt), new InferenceParams { Temperature = 0.6f, AntiPrompts = [ "User:" ] })) { Console.Write(text); } prompt = Console.ReadLine() ?? "";}
// 保存会话session.SaveSession("SavedSessionPath");


模型量化

以下示例展示了如何量化模型:

string srcFilename = "<Your source path>";string dstFilename = "<Your destination path>";string ftype = "q4_0";if(Quantizer.Quantize(srcFileName, dstFilename, ftype)){    Console.WriteLine("Quantization succeed!");}else{    Console.WriteLine("Quantization failed!");}

想了解更多使用方法,请参考示例代码。


Web API

        LLamaSharp提供了ASP.NET core集成以及一个Web应用演示。因为人手不足,如果您熟悉ASP.NET core,将非常感激你能帮助升级Web API集成。

特性

以下是项目中的特性清单:

✅ LLaMA模型推理

✅ 生成嵌入、分词和去分词 

✅ 聊天会话 

✅ 模型量化

✅ 语法 

✅ 状态保存与加载 

✅ BotSharp集成在线演示 

✅ ASP.NET core集成 

✅ Semantic-kernel集成 

🔳 微调 

✅ 本地文档搜索(由kernel-memory启用) 

🔳 MAUI集成


Console示例

演示程序:demo-console

深入浅出LLamaSharp:打造智能.NET应用,不需GPU也能玩转LLaMA模型


常见问题

  • GPU内存不足:请尝试将n_gpu_layers设置为一个较小的数字。

  • 不支持的模型:llama.cpp正在快速开发中,经常会有重大更改。请检查模型的发布日期,并找到一个合适的LLamaSharp版本进行安装,或者自己生成gguf格式的权重。

  • 无法载入本机库

    • 确保您已经安装了一个后端包。

    • 在代码最开始处运行NativeLibraryConfig.WithLogs()以打印更多信息。

  • GGUF格式的模型与LLamaSharp兼容。在huggingface上搜索gguf是一个好主意,以找到一个模型。另一个选择是自己生成GGUF格式文件,请参考convert.py获取更多信息。


贡献

        任何贡献都是受欢迎的!在LLamaSharp Dev项目中有一个TODO列表,你可以挑选一个有趣的任务开始。请阅读贡献指南了解更多信息。

        您还可以做以下事情之一,帮助社区改进LLamaSharp:

  • 提交功能请求。

  • star并分享LLamaSharp让更多人知道它。

  • 关于LLamaSharp写博客或演示。

  • 帮助开发Web API和UI集成。

  • 只要打开一个问题,报告你遇到的问题!


        最后,该项目的开源地址是:

https://github.com/SciSharp/LLamaSharp

        大家可以去github上获取该项目更详细的信息。

原文始发于微信公众号(许泽宇的技术分享):深入浅出LLamaSharp:打造智能.NET应用,不需GPU也能玩转LLaMA模型

版权声明:admin 发表于 2024年1月22日 上午7:11。
转载请注明:深入浅出LLamaSharp:打造智能.NET应用,不需GPU也能玩转LLaMA模型 | CTF导航

相关文章