乐趣区

关于人工智能:在本地运行-LLMs-的-6-种方法

商业人工智能和大型语言模型 (LLM) 有一个很大的毛病: 隐衷 。在解决敏感数据或专有数据时,咱们无奈从这些工具中获益。因而,咱们须要理解如何在本地运行私人 LLM。开源模型提供了一种解决方案,但它们也有本人的挑战和劣势。

 

设定期望值

开源软件品种繁多,有数以千计的模型可供选择,从 Meta 等大型组织提供的模型到集体爱好者开发的模型,各有不同。然而,运行这些模型也面临着一系列挑战:

 

  • 它们可能须要弱小的硬件, 须领有足够的内存和一个 GPU
  • 只管开源模型在不断改进,但它们的性能通常仍无奈与 ChatGPT 等更欠缺的产品等量齐观,因为 ChatGPT 得益于宏大的工程师团队的反对
  • 并非所有模型都能用于商业用途。

 

不过,正如同谷歌的一份文件所指出的,开源和闭源模型之间的差距正在放大。

 

 

Hugging Face 和 Transformers

Hugging Face 相当于机器学习和人工智能的 Docker Hub,提供了大量开源模型 。并且,Hugging Face 会定期对模型进行基准测试,并提供排行榜,帮忙用户抉择最佳模型。

 

Hugging Face 还提供了一个 Python 库 transformers,能够简化本地运行一个 LLM 的过程。上面的示例应用该库运行了一个较旧的 GPT-2 microsoft/DialoGPT-medium 模型。第一次运行时,Transformers 会下载模型,你能够与它进行五次交互。该脚本还须要装置 PyTorch。

 

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
tokenizer = AutoTokenizer.from_pretrained("microsoft/DialoGPT-medium", padding_side='left')
model = AutoModelForCausalLM.from_pretrained("microsoft/DialoGPT-medium")
# source: https://huggingface.co/microsoft/DialoGPT-medium
# Let's chat for 5 lines
for step in range(5):
    # encode the new user input, add the eos_token and return a tensor in Pytorch
    new_user_input_ids = tokenizer.encode(input(">> User:") + tokenizer.eos_token, return_tensors='pt')
    # append the new user input tokens to the chat history
    bot_input_ids = torch.cat([chat_history_ids, new_user_input_ids], dim=-1) if step > 0 else new_user_input_ids
    # generated a response while limiting the total chat history to 1000 tokens, 
    chat_history_ids = model.generate(bot_input_ids, max_length=1000, pad_token_id=tokenizer.eos_token_id)
    # pretty print last output tokens from bot
    print("DialoGPT: {}".format(tokenizer.decode(chat_history_ids[:, bot_input_ids.shape[-1]:][0], skip_special_tokens=True)))

 

Transformers 劣势

 

  • 主动下载模型
  • 提供代码片段
  • 现实的试验和学习工具

 

Transformers 劣势

 

  • 须要对 ML 和 NLP 有扎实的理解
  • 须要具备编码和配置技能

 

LangChain

咱们在本地运行 LLM 的另一种办法是应用 LangChain。LangChain 是一个用于构建人工智能应用程序的 Python 框架。 它提供形象和中间件,以便在其反对的模型之上开发人工智能应用程序 。例如,上面的代码向 microsoft/DialoGPT-medium 模型提出了一个问题:

 

from langchain.llms.huggingface_pipeline import HuggingFacePipeline
hf = HuggingFacePipeline.from_model_id(model_id="microsoft/DialoGPT-medium", task="text-generation", pipeline_kwargs={"max_new_tokens": 200, "pad_token_id": 50256},
)
from langchain.prompts import PromptTemplate
template = """Question: {question}
Answer: Let's think step by step."""
prompt = PromptTemplate.from_template(template)
chain = prompt | hf
question = "What is electroencephalography?"
print(chain.invoke({"question": question}))

 

LangChain 劣势

 

  • 更便捷的模型治理
  • 实用的 AI 应用程序开发工具

 

**LangChain 劣势
**

 

  • 速度无限,与 Transformers 雷同
  • 仍须编写应用程序的逻辑代码或创立适合的用户界面

 

Llama.cpp

Llama.cpp 是一个基于 C 和 C++ 的 LLM 推理引擎,针对苹果芯片进行了优化,可运行 Meta 的 Llama2 模型。

 

一旦咱们克隆了资源库并构建了我的项目,咱们就能够应用 Llama.cpp 运行一个模型:

 

$ ./main -m /path/to/model-file.gguf -p "Hi there!"

 

Llama.cpp 劣势

 

  • 性能高于基于 Python 的解决方案
  • 在适中的硬件上反对 Llama 7B 等大型模型
  • 提供绑定,以便在通过 Llama.cpp 运行推理的同时应用其余语言构建 AI 应用程序

 

Llama.cpp 劣势

 

  • 模型反对无限
  • 须要构建工具

 

Llamafile

Llamafile 由 Mozilla 开发,为运行 LLM 提供了一个用户敌对的代替计划。Llamafile 以其可移植性和创立单文件可执行文件的能力而著称。

 

下载 llamafile 和任何 GGUF 格局的模型后,咱们就能够用以下命令启动本地浏览器会话:

 

$ ./llamafile -m /path/to/model.gguf

 

Llamafile 劣势

 

  • 与 Llama.cpp 雷同的速度劣势
  • 能够创立嵌入模型的繁多可执行文件

 

Llamafile 劣势

 

  • 该我的项目仍处于晚期阶段
  • 不反对所有模型,只反对 Llama.cpp 反对的模型

 

Ollama

Ollama 是 Llama.cpp 和 Llamafile 的替代品,对用户更加敌对。你能够下载一个可执行文件,在你的机器上装置一个服务。装置实现后,关上终端并运行:

 

$ ollama run llama2

 

Ollama 劣势

 

  • 易于装置和应用
  • 能够运行 Ilama 和 vicuña 模型
  • 运行速度极快

 

Ollama 劣势

 

  • 提供无限的模型库
  • 自行治理模型,不能重复使用本人的模型
  • 无奈调整运行 LLM 的选项
  • 暂无 Windows 版本

 

GPT4ALL

GPT4ALL 是一款易于应用的桌面应用程序,具备直观的 GUI。它反对本地模型运行,并可通过 API 密钥连贯 OpenAI。它的突出特点是可能解决本地文档的上下文,确保隐衷。

 

 

GPT4ALL 劣势

 

  • 具备敌对 UI 的代替计划
  • 反对各种策动模型

 

GPT4ALL 劣势

 

  • 机型抉择无限
  • 局部机型有商业用途限度

 

论断

 

抉择适合的工具在本地运行 LLM 取决于您的需要和专业知识。从 GPT4ALL 等用户敌对型应用程序,到 Llama.cpp 等技术性更强的选项,以及基于 Python 的解决方案,可提供多种抉择。可见开源模式正在迎头赶上,提供了对数据和隐衷的更多管制。随着这些模型的倒退,它们或无望与 ChatGPT 等产品竞争。

退出移动版