在本地執行 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: (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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在本地运行 LLMs 的 6 种方法
- 在 Ruby 中執行 Shell 命令的 6 種方法
- 在本地執行Kubernetes的3種主流方式
- 6個在本地機器上執行 Kubernetes 的工具
- 在 Windows 中執行 Linux 命令的 4 種方法WindowsLinux
- 三種方式本地執行Knative
- 在Oracle裡提高SQL執行效率的三種方法NQOracleSQL
- 【Java】執行緒的 6 種狀態Java執行緒
- 在oracle中跟蹤會話執行語句的幾種方法Oracle會話
- Linux 技巧:讓程式在後臺可靠執行的幾種方法Linux
- 【 Thread】建立執行緒的2種方法thread執行緒
- 建立執行緒的4種方法 and 執行緒的生命週期執行緒
- 在Java中本地進行執行緒間資料傳輸的三種方式和原始碼展示Java執行緒原始碼
- 執行緒的6種狀態以及轉變執行緒
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 終止java執行緒的2種方法Java執行緒
- Java建立多執行緒的一種方法Java執行緒
- Oracle提高SQL執行效率的三種方法ITOracleSQL
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- 觸控板無法在 MacBook 上執行?9種有效的修復方法Mac
- java 多執行緒之使用 interrupt 停止執行緒的幾種方法Java執行緒
- Spring AI 與 Ollama 在本地執行案例原始碼SpringAI原始碼
- 六種用ruby呼叫執行shell命令的方法
- 保障爬蟲穩定執行的四種方法爬蟲
- 本地執行 Gemma 的 pytorch 整合GemmaPyTorch
- 深入分析3種執行緒池執行任務的邏輯方法執行緒
- 如何使用 mock 資料在本地執行 SAP Fiori ElementsMock
- Linux中執行Shell指令碼的方式(三種方法)Linux指令碼
- 如何制定專案執行計劃的幾種方法
- Linux系統安裝執行.AppImage檔案的兩種執行方法介紹LinuxAPP
- 本地啟動服務的三種方法
- Java之執行緒同步完成售票例項的6種方式Java執行緒
- [20221018]本地執行與遠端執行.txt
- 在共享記憶體中進行執行緒間的同步是確保多執行緒程式正確執行的關鍵,以下是幾種常見的方法記憶體執行緒
- 一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集分散式
- Java多執行緒【三種實現方法】Java執行緒
- VC啟動一個新執行緒的三種方法執行緒
- Linux:檢查當前執行級別的五種方法Linux