商业人工智能和大型言语模型 (LLM) 有一个很大的缺点:隐私。在处理敏感数据或专有数据时,咱们无法从这些东西中获益。因而,咱们需求了解如安在本地运转私人 LLM。开源模型供给了一种解决计划,但它们也有自己的应战和优势。

设定时望值

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

  • 它们或许需求强壮的硬件,须拥有满足的内存和一个 GPU
  • 尽管开源模型在不断改进,但它们的功能通常仍无法与 ChatGPT 等更完善的产品相提并论,由于 ChatGPT 得益于庞大的工程师团队的支撑
  • 并非一切模型都能用于商业用途。

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

在本地运转 LLMs 的 6 种方法

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 和 vicua 模型
  • 运转速度极快

Ollama 下风

  • 供给有限的模型库
  • 自行办理模型,不能重复运用自己的模型
  • 无法调整运转 LLM 的选项
  • 暂无 Windows 版别

GPT4ALL

GPT4ALL 是一款易于运用的桌面应用程序,具有直观的 GUI。它支撑本地模型运转,并可经过 API 密钥衔接 OpenAI。它的杰出特点是能够处理本地文档的上下文,确保隐私。

在本地运转 LLMs 的 6 种方法

GPT4ALL 优势

  • 具有友好UI的代替计划
  • 支撑各种策划模型

GPT4ALL 下风

  • 机型挑选有限
  • 部分机型有商业用途限制

结论

挑选适宜的东西在本地运转 LLM 取决于您的需求和专业知识。从 GPT4ALL 等用户友好型应用程序,到 Llama.cpp 等技术性更强的选项,以及基于 Python 的解决计划,可供给多种挑选。可见开源模式正在迎头赶上,供给了对数据和隐私的更多控制。跟着这些模型的发展,它们或有望与 ChatGPT 等产品竞赛。