当前位置:   article > 正文

在本地运行大型语言模型——您自己的类似ChatGPT的C#语言AI_c# llama

c# llama

目录

迈向开源模型和执行——一点点历史......

SciSharp/LLamaSharp入门

1. 下载模型

2. 创建控制台应用程序并安装LLamaSharp

3. 初始化LLaMA模型并创建聊天会话

结束语


在过去的几个月里,科技界和主流媒体上的许多新闻都围绕着ChatGPT,这是OpenAI的人工智能(AI)产品。ChatGPT是一种针对对话进行微调的大型语言模型(LLM)。虽然这句话低估了这项技术,但它是一个看起来很聪明的聊天机器人,您可以询问有关各种领域的问题。

直到最近,使用这些LLM还需要依赖第三方服务和云计算平台。要将任何LLM集成到您自己的应用程序中,或者只是使用一个LLM,您必须使用OpenAI,Microsoft Azure或其他应用程序刷信用卡。

但是,随着硬件和软件的进步,现在可以在您自己的机器和/或服务器上本地运行这些模型。

在这篇文章中,我们将看到如何让自己的AI由直接在CPU上运行的大型语言模型提供支持!

迈向开源模型和执行——一点点历史......

OpenAI发布ChatGPT几个月后,Meta发布了LLaMA。LLaMA模型仅用于研究目的,必须向Meta提出要求。

然而,有人泄露了LLaMA的权重,这在互联网上引发了很多活动。您可以在许多地方找到可供下载的模型,并在您自己的硬件上使用它(请注意,LLaMA仍受非商业许可的约束)。

Alpaca是斯坦福大学(Standford)微调的LLaMA模型。还有Vicuna,另一个微调的LLaMA模型。还有WizardLM,还有......

你明白了:LLaMA吐出一堆其他随时可用的模型(对不起双关语)。

当社区的一部分人正在训练新模型时,其他人正在努力使这些LLM在消费类硬件上运行成为可能。Georgi Gerganov发布了llama.cpp,这是一个C++实现,可以在CPU上运行LLaMA模型(和衍生物)。它现在可以运行各种模型:LLaMA、Alpaca、GPT4All、Vicuna、Koala、OpenBuddy、WizardLM 等。

还有许多语言的包装器:

让我们测试一下该列表中的最后一个!

SciSharp/LLamaSharp入门

您听说过SciSharp Stack吗?他们的目标是成为一个开源生态系统,将所有主要的ML/AI框架从Python带到.NET——包括通过SciSharp/LLamaSharp的LLaMA(和朋友)。

LlamaSharp是LLaMA模型的.NET的llama.cpp绑定,并提供API以使用LLaMA模型。它适用于Windows和Linux,不需要您考虑llama.cpp底层。在撰写本文时,它不支持macOS。

现在,您需要什么才能开始?

由于您需要一个模型来使用,因此让我们先对其进行排序。

1. 下载模型

LLamaSharp适用于多种模型,但支持取决于您使用的LLamaSharp版本。支持的模型在README中链接,请去探索一下。

在这篇博文中,我们将使用LLamaSharp版本0.3.0(撰写本文时的最新版本)。我们还将使用WizardLM模型,更具体地说是wizardLM-7B.ggmlv3.q4_1.bin模型。它在推理的准确性和速度之间提供了一个很好的组合,这很重要,因为我们将在CPU上使用它。

有许多更准确的模型(或更快、更不准确的模型),因此请尝试一下最有效的模型。在任何情况下,请确保您有2.8GB到8GB的磁盘空间用于此型号的变体,以及最多10GB的内存。

2. 创建控制台应用程序并安装LLamaSharp

使用您喜欢的IDE,创建一个新的控制台应用程序,并复制到您刚刚下载的模型中。接下来,安装LLamaSharpLLamaSharp.Backend.Cpu包。如果您有Cuda GPU,您还可以使用Cuda后端包。

以下是我们的项目:

有了这些,我们就可以开始创建我们自己的聊天机器人,该机器人在本地运行,不需要OpenAI即可运行。

3. 初始化LLaMA模型并创建聊天会话

Program.cs中,从以下代码片段开始,加载我们刚刚下载的模型:

  1. using LLama;
  2. var model = new LLamaModel(new LLamaParams(
  3. model: Path.Combine("..", "..", "..", "Models", "wizardLM-7B.ggmlv3.q4_1.bin"),
  4. n_ctx: 512,
  5. interactive: true,
  6. repeat_penalty: 1.0f,
  7. verbose_prompt: false));

此代码片段从您在上一步中存储下载的模型的目录中加载模型。它还传递了其他几个参数(并且比此示例中的参数更多)。

供参考:

  • n_ctx——输入序列中的最大标记数(换句话说,您的问题/提示可以有多少个标记)。
  • interactive——指定您希望在提示之间保留上下文,以便可以在以前的结果基础上进行构建。这使得模型的行为类似于聊天。
  • repeat_penalty——确定对长响应的惩罚(并有助于使响应更加切中要害)。
  • verbose_prompt——切换详细程度。

同样,还有更多可用的参数,其中大部分在llama.cpp存储库中进行了解释

接下来,我们可以使用我们的模型来启动聊天会话:

  1. var session = new ChatSession<LLamaModel>(model)
  2. .WithPrompt(...)
  3. .WithAntiprompt(...);

当然,这些...不会编译,但让我们首先解释一下聊天会话需要什么。

.WithPrompt()(或.WithPromptFile())方法指定模型的初始提示。这可以留空,但通常是LLM的一组规则。在llama.cpp存储库中找到一些示例提示,或编写自己的提示。

.WithAntiprompt()方法指定反提示,这是LLM在预期用户输入时将显示的提示。

以下是与荷马辛普森(Homer Simpson)的LLM设置聊天会话的方法:

  1. var session = new ChatSession<LLamaModel>(model)
  2. .WithPrompt("""
  3. You are Homer Simpson, and respond to User with funny Homer Simpson-like comments.
  4. User:
  5. """)
  6. .WithAntiprompt(new[] { "User: " });

我们稍后会看到这个荷马辛普森模型给出的结果,但一般来说,你会希望更详细地了解对LLM的期望。下面是名为“LocalLLM”的模型的聊天会话设置示例,该模型对结对程序员很有帮助:

  1. var session = new ChatSession<LLamaModel>(model)
  2. .WithPrompt("""
  3. You are a polite and helpful pair programming assistant.
  4. You MUST reply in a polite and helpful manner.
  5. When asked for your name, you MUST reply that your name is 'LocalLLM'.
  6. You MUST use Markdown formatting in your replies when the content is a block of code.
  7. You MUST include the programming language name in any Markdown code blocks.
  8. Your code responses MUST be using C# language syntax.
  9. User:
  10. """)
  11. .WithAntiprompt(new[] { "User: " });

现在我们有了聊天会话,我们可以开始与它交互了。读取输入和打印LLM输出需要一些额外的代码。

  1. Console.WriteLine();
  2. Console.Write("User: ");
  3. while (true)
  4. {
  5. Console.ForegroundColor = ConsoleColor.Green;
  6. var prompt = Console.ReadLine() + "\n";
  7. Console.ForegroundColor = ConsoleColor.White;
  8. foreach (var output in session.Chat(prompt, encoding: "UTF-8"))
  9. {
  10. Console.Write(output);
  11. }
  12. }

差不多就是这样。session变量中的聊天会话是使用其.Chat()方法提示的,并且所有输出都逐个令牌返回,就像任何生成模型一样。

你想看到它的实际效果,对吧?这是“荷马辛普森聊天”的实际效果:

更有用的“C#结对程序员聊天”:

很不错,不是吗?

在我的Windows笔记本电脑 (i7-10875H CPU @ 2.30GHz) 上,推理肯定比使用ChatGPT时慢,但它肯定是可行的。

结束语

由于硬件需求,使用LLM一直需要第三方服务和云平台,例如OpenAI的ChatGPT。

在这篇文章中,我们了解了开源大型语言模型的一些历史,以及模型本身以及周围社区如何使在本地运行这些模型成为可能。

我很想听听您将使用这种方法构建什么!

https://blog.maartenballiauw.be/post/2023/06/15/running-large-language-models-locally-your-own-chatgpt-like-ai-in-csharp.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/634392
推荐阅读
相关标签
  

闽ICP备14008679号