找回密码
 立即注册

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

2024-11-21 22:22| 发布者: admin| 查看: 251| 评论: 0

摘要: 在如今的.NET社区中,机器学习和人工智能的应用越来越普遍。今天我要给大家推荐一个名叫LLamaSharp的开源项目。这是llama.cpp的C#/.NET绑定,提供了高级的API,使得我们能在本地设备上使用C#/.NET 推理LLaMA模型,并 ...
 在如今的.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的简单示例。

  1. using LLama.Common;
  2. using LLama;
  3. string modelPath = "<Your model path>"; // 请更改为您自己的模型路径
  4. 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:"; // 这里使用“chat-with-bob”提示。
  5. // 加载模型
  6. var parameters = new ModelParams(modelPath)
  7. {
  8. ContextSize = 1024,
  9. Seed = 1337,
  10. GpuLayerCount = 5
  11. };
  12. using var model = LLamaWeights.LoadFromFile(parameters);
  13. // 初始化一个聊天会话
  14. using var context = model.CreateContext(parameters);
  15. var ex = new InteractiveExecutor(context);
  16. ChatSession session = new ChatSession(ex);
  17. // 展示提示内容
  18. Console.WriteLine();
  19. Console.Write(prompt);
  20. // 循环运行推理,与LLM聊天
  21. while (prompt != "stop")
  22. {
  23. await foreach (var text in session.ChatAsync(new ChatHistory.Message(AuthorRole.User, prompt), new InferenceParams { Temperature = 0.6f, AntiPrompts = [ "User:" ] }))
  24. {
  25. Console.Write(text);
  26. }
  27. prompt = Console.ReadLine() ?? "";

  28. 路过

    雷人

    握手

    鲜花

    鸡蛋

    QQ|Archiver|手机版|小黑屋|软件开发编程门户 ( 陇ICP备2024013992号-1|甘公网安备62090002000130号 )

    GMT+8, 2025-1-18 10:09 , Processed in 0.040934 second(s), 16 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.