在本地執行 LLMs 的 6 種方法

Seal软件發表於2024-02-28

商業人工智慧和大型語言模型 (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: (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 等產品競爭。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70026925/viewspace-3007630/,如需轉載,請註明出處,否則將追究法律責任。

相關文章