写点什么

在本地运行 LLMs 的 6 种方法

作者:SEAL安全
  • 2024-02-28
    澳大利亚
  • 本文字数:2474 字

    阅读完需:约 8 分钟

在本地运行 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, AutoTokenizerimport 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 linesfor 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 PromptTemplatetemplate = """Question: {question}Answer: Let's think step by step."""prompt = PromptTemplate.from_template(template)chain = prompt | hfquestion = "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 等产品竞争。

发布于: 5 小时前阅读数: 7
用户头像

SEAL安全

关注

开发者友好的企业级解决方案 2020-11-05 加入

公众号:Seal软件 Seal-io

评论

发布
暂无评论
在本地运行 LLMs 的 6 种方法_人工智能_SEAL安全_InfoQ写作社区