一文讀懂本地運行 LLM 的優(yōu)秀實踐方法
Hello folks,我是 Luga,今天我們來聊一下人工智能(AI)生態(tài)領(lǐng)域相關(guān)的技術(shù) - LLM -常見的本地運行 LLM 方法。
眾所周知,如今使用 ChatGPT 等大型模型工具變得異常簡單,只需通過瀏覽器在線訪問即可。然而,需要注意的是,這種方式可能對我們的隱私和數(shù)據(jù)造成一些潛在影響,這一點需要格外小心。像主流的 OpenAI 等平臺會存儲我們所構(gòu)建的提示、響應(yīng)以及其他元數(shù)據(jù),以便重新訓練模型。雖然對于某些人來說這并不構(gòu)成問題,但注重隱私的人往往更傾向于在本地使用這些模型,以確保在交互過程中沒有任何外部跟蹤的情況下保護隱私。
在本文中,我們將探討常見的三種在本地使用 LLM 的方法。大多數(shù)軟件都與各種主要操作系統(tǒng)兼容,并且可以輕松下載和安裝,以供大家直接上手。
Ollama
作為一個開源平臺,Ollama 使我們能夠在本地計算機上直接運行 Llama 3、Mistral 和 Gemma 等大型語言模型(LLM)。這意味著我們可以充分利用這些人工智能模型的強大功能,而無需依賴基于云的服務(wù)。通過使用 Ollama,我們可以在本地進行各種任務(wù),獲得高效而便捷的體驗。
不論是自然語言處理、文本生成還是其他應(yīng)用領(lǐng)域,我們都可以在掌握自己的數(shù)據(jù)和隱私的同時,充分發(fā)揮 LLM 的潛力。不再受制于云端服務(wù)的限制,我們可以靈活地定制和配置模型,以滿足特定需求,并在本地環(huán)境中獲得更高的性能和效率。這為我們提供了更大的控制權(quán)和靈活性,同時降低了對外部云端服務(wù)的依賴。
基于 Ollama,我們可以拓展我們的研究和開發(fā)能力,探索更廣泛的應(yīng)用場景,并且在保護數(shù)據(jù)隱私方面更加安心。我們可以在本地環(huán)境中充分利用這些強大的語言模型,解決復(fù)雜的問題,推動創(chuàng)新的進展??傊?,Ollama 為我們提供了一個強大且可靠的方式,讓我們能夠本地運行 LLM,釋放出其全部潛力。
這里,我們以 Mac 平臺為例,簡單地部署運行 Llama 3 大模型,具體可參考如下步驟所示:
[lugalee@Labs ~ ]% docker pull ollama/ollama
Using default tag: latest
latest: Pulling from ollama/ollama
d5a2ad729c09: Pull complete
e917c61587da: Pull complete
57bc2d1a456b: Downloading [==================> ] 104.2MB/277.6MB
...
Status: Downloaded newer image for ollama/ollama:latest
docker.io/ollama/ollama:latest
[lugalee@Labs ~ ]% docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
cef2b5f8510c1f995b6500e79052dd141ce03649f2137c6d8c6bdef04ff3c6da
[lugalee@Labs ~ ]% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cef2b5f8510c ollama/ollama "/bin/ollama serve" 6 seconds ago Up 5 seconds 0.0.0.0:11434->11434/tcp, :::11434->11434/tcp ollama
# ollama run llama3
pulling manifest
pulling 6a0746a1ec1a... 100% ▕██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 4.7 GB
pulling 4fa551d4f938... 100% ▕██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 12 KB
pulling 8ab4849b038c... 100% ▕██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 254 B
pulling 577073ffcc6c... 100% ▕██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 110 B
pulling 3f8eb4da87fa... 100% ▕██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 485 B
verifying sha256 digest
writing manifest
removing any unused layers
success
Ollama 不僅提供了直接在本地運行 LLM 的便利性,還具備了出色的擴展性和集成能力。這款開源平臺允許開發(fā)者在本地啟動HTTP服務(wù)器,將強大的 LLM 能力對接到各類應(yīng)用程序中,大大拓展了 AI 助手的應(yīng)用邊界。
舉例來說,通過集成 Ollama 的本地 HTTP 服務(wù)器,我們可以將其無縫融入到廣受歡迎的 Code GPT VSCode 擴展之中。開發(fā)人員只需在擴展中配置本地服務(wù)器地址,便可立即體驗到 LLM 在代碼編寫、優(yōu)化、錯誤修復(fù)等方面的神級輔助能力。不再被云服務(wù)的延遲、隱私泄露等問題所困擾,開發(fā)者可以盡情釋放 LLM 的潛能,大幅提高工作效率和代碼質(zhì)量。
Ollama 本地服務(wù)器的優(yōu)勢并不僅限于此。無論是網(wǎng)站開發(fā)中的內(nèi)容生成、商業(yè)分析領(lǐng)域的智能決策支持,還是個人生活中的文本寫作助手,Ollama 都可以作為底層 LLM 引擎,為各類應(yīng)用程序賦能,讓人工智能無所不在。更妙的是,這一切僅需在本地計算機上運行 Ollama,就能暢享 LLM 的強大功能,而無需昂貴的云服務(wù)費用。
GPT4ALL
基于海量數(shù)據(jù)訓練而成的AI模型,展現(xiàn)出了令人驚嘆的自然語言處理能力,在文本理解、生成、推理等多個領(lǐng)域引領(lǐng)了技術(shù)革新。然而,龐大的計算資源需求也使絕大多數(shù)普通用戶和中小企業(yè)無緣于LLMs強大的能力。
正是基于這一現(xiàn)狀,GPT4All 生態(tài)系統(tǒng)應(yīng)運而生,旨在打造最佳的教學調(diào)整助理風格語言模型,突破LLM模型的資源枷鎖,讓每個個人和企業(yè)都能自由使用、分發(fā)和構(gòu)建定制化的大規(guī)模語言模型。
GPT4All 生態(tài)系統(tǒng)的核心是經(jīng)過優(yōu)化的 LLM 模型文件,體積僅為 3GB-8GB,卻蘊含著卓越的自然語言處理實力。用戶只需下載并集成這些模型文件,即可立即體驗到強大的 AI 助理功能,無需耗費高昂的云服務(wù)費用。更重要的是,這些模型可在普通消費級 CPU 上高效運行,解決了傳統(tǒng) LLM 在終端設(shè)備上部署的痛點。
除了開箱即用的優(yōu)化模型,GPT4All 生態(tài)系統(tǒng)還提供了靈活的模型訓練和定制化工具鏈。無論是個人開發(fā)者還是企業(yè)用戶,都可以基于 GPT4All 的框架,使用自有數(shù)據(jù)為 LLM 模型進行教學微調(diào),從而量身定制出符合自身需求的專屬 AI 助手。
GPT4All 生態(tài)系統(tǒng)并非只是一個提供優(yōu)化語言模型的平臺,而更是一個極具實用價值的人工智能助手。通過提供對重要文檔和代碼庫的訪問權(quán)限,GPT4All 能夠充分發(fā)揮其檢索增強生成(Retrieval-Augmented Generation)的強大能力,為用戶生成高度相關(guān)且信息豐富的響應(yīng)。
具體來說,用戶可以指定 GPT4All 模型訪問包含了諸如產(chǎn)品文檔、技術(shù)手冊、法律合同等重要文件的文件夾,甚至是龐大的代碼庫。GPT4All 會自動分析和索引這些內(nèi)容,將其與語言模型的知識庫相結(jié)合,形成一個涵蓋范圍廣闊的語義知識圖譜。在此基礎(chǔ)上,當用戶提出查詢或請求時,GPT4All 不僅會基于模型本身的知識進行回答,更會從相關(guān)文檔和代碼中檢索并綜合相關(guān)信息,從而生成令人驚艷的高質(zhì)量響應(yīng)。
這一檢索增強生成的能力使 GPT4All 的應(yīng)用場景得到極大擴展。無論是企業(yè)級的智能知識庫構(gòu)建、代碼分析和優(yōu)化,還是個人層面的寫作輔助和信息整合,GPT4All 都能發(fā)揮出超乎想象的威力,成為全場景下的得力智能助手。
在 GPT4All 生態(tài)系統(tǒng)中,本地大型語言模型(Local LLMs)的運行效率是一個值得重點關(guān)注的問題。推理速度直接決定著用戶的交互體驗,過于滯緩的響應(yīng)將極大影響模型的實用價值。
影響本地 LLM 推理速度的兩大關(guān)鍵因素是:模型的規(guī)模大小,以及輸入的文本上下文令牌數(shù)量。一般來說,模型越大,對應(yīng)的計算需求就越高;而輸入上下文越長,模型也需要消耗更多資源進行處理。因此,在本地 CPU 環(huán)境下運行體積龐大、輸入上下文冗長的 LLM 模型時,往往會遇到推理速度嚴重下降的問題。
為了避免這一情況,GPT4All 團隊給出了明確的建議:如果需要處理的上下文窗口超過750個令牌,最好將 LLM 模型部署在 GPU 環(huán)境中運行。這不僅能最大程度地發(fā)揮模型性能,還可確保在處理大量上下文時,保持流暢高效的推理速度。事實上,GPT4All 在開發(fā)路線圖中已經(jīng)計劃支持所有型號的 LLM 在 GPU 上本地化運行,以滿足需求更加苛刻的場景。
不難看出,GPT4All 團隊在系統(tǒng)設(shè)計上體現(xiàn)了極高的務(wù)實性和前瞻性。他們深知終端設(shè)備的算力限制,因而采取了針對性的優(yōu)化措施,最大限度挖掘硬件性能,為用戶帶來流暢一致的本地 LLM 體驗。
除了 GPU 加速,GPT4All 還在模型層面進行了多方面的優(yōu)化,以提升在 CPU 環(huán)境下的推理效率。這包括模型剪枝、量化、知識蒸餾等前沿技術(shù)的應(yīng)用,有效降低了模型在保持性能的同時所需的內(nèi)存和算力資源。這些創(chuàng)新策略的實現(xiàn),再次印證了 GPT4All 團隊在 AI 算法和系統(tǒng)架構(gòu)方面的卓越能力。
可以說,推理加速是 GPT4All 賴以立足的技術(shù)支柱。只有確保 Local LLMs 能快速流暢地響應(yīng),GPT4All 才能真正釋放 LLM 的全部價值,為用戶提供無縫的智能體驗。因此,我們有理由相信,隨著 GPU 本地化支持的到來,以及更多優(yōu)化技術(shù)的推出,GPT4All 生態(tài)系統(tǒng)的性能將再獲質(zhì)的飛躍,繼續(xù)引領(lǐng)本地 LLM 的未來發(fā)展方向。
LLaMA.cpp
在推動人工智能大眾化、本地化進程中,LLaMA.cpp 無疑扮演著先鋒的角色。作為一款高度通用的工具,它為用戶提供了在本地輕松使用任何開源大型語言模型(Open Source LLMs)的便利,消除了云服務(wù)依賴及其帶來的種種顧慮。
LLaMA.cpp 的設(shè)計理念是賦能和自由,它以命令行界面(CLI)和圖形用戶界面(GUI)兩種方式為用戶開啟通往本地 LLM 世界的大門。無論是資深開發(fā)者還是新手用戶,都能在 LLaMA.cpp 的引導(dǎo)下,快速上手并充分挖掘本地 LLM 的潛力。
更為值得一提的是,LLaMA.cpp 背后有著堅實的技術(shù)實力支撐。作為一款純 C/C++ 編寫的工具,它展現(xiàn)出了令人贊嘆的性能表現(xiàn)。對于任何查詢請求,LLaMA.cpp 都能在瞬間作出響應(yīng),完全避免了網(wǎng)絡(luò)延遲等問題,給用戶帶來流暢、高效的本地 LLM 體驗。
這種出色的響應(yīng)速度源自 LLaMA.cpp 對開源 LLM 模型的深度優(yōu)化。工具內(nèi)置了諸如模型剪枝、量化、知識蒸餾等多種先進技術(shù),有效降低了模型在 CPU 和 GPU 環(huán)境下的計算資源占用,確保即使在普通個人電腦上,也能夠發(fā)揮 LLM 的最大潛能。
可以說,LLaMA.cpp 是 GPT4All 等本地 LLM 生態(tài)系統(tǒng)中的佼佼者。憑借多方位的優(yōu)化支持,用戶無需高端硬件,即可輕松調(diào)用各種開源大模型,在本地完成文本生成、問答、代碼編寫等多種任務(wù)。
與此同時,LLaMA.cpp 還為用戶保留了充分的自主權(quán)。作為一款高度可定制的工具,它提供了豐富的自定義選項,允許用戶根據(jù)自身需求調(diào)整模型參數(shù)、設(shè)置偏好,甚至可以在本地對模型進行微調(diào)和再訓練。這種"開箱即用"但又"可自由改造"的特性,充分契合了人工智能 “Democratization” 的理念。
$ make -j && ./main -m models/llama-13b-v2/ggml-model-q4_0.gguf -p "Building a website can be done in 10 simple steps:\nStep 1:" -n 400 -e
I llama.cpp build info:
I UNAME_S: Darwin
I UNAME_P: arm
I UNAME_M: arm64
I CFLAGS: -I. -O3 -std=c11 -fPIC -DNDEBUG -Wall -Wextra -Wpedantic -Wcast-qual -Wdouble-promotion -Wshadow -Wstrict-prototypes -Wpointer-arith -Wmissing-prototypes -pthread -DGGML_USE_K_QUANTS -DGGML_USE_ACCELERATE
I CXXFLAGS: -I. -I./common -O3 -std=c++11 -fPIC -DNDEBUG -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function -Wno-multichar -pthread -DGGML_USE_K_QUANTS
I LDFLAGS: -framework Accelerate
I CC: Apple clang version 14.0.3 (clang-1403.0.22.14.1)
I CXX: Apple clang version 14.0.3 (clang-1403.0.22.14.1)
make: Nothing to be done for `default'.
main: build = 1041 (cf658ad)
main: seed = 1692823051
llama_model_loader: loaded meta data with 16 key-value pairs and 363 tensors from models/llama-13b-v2/ggml-model-q4_0.gguf (version GGUF V1 (latest))
llama_model_loader: - type f32: 81 tensors
llama_model_loader: - type q4_0: 281 tensors
llama_model_loader: - type q6_K: 1 tensors
llm_load_print_meta: format = GGUF V1 (latest)
llm_load_print_meta: arch = llama
llm_load_print_meta: vocab type = SPM
llm_load_print_meta: n_vocab = 32000
llm_load_print_meta: n_merges = 0
llm_load_print_meta: n_ctx_train = 4096
llm_load_print_meta: n_ctx = 512
llm_load_print_meta: n_embd = 5120
llm_load_print_meta: n_head = 40
llm_load_print_meta: n_head_kv = 40
llm_load_print_meta: n_layer = 40
llm_load_print_meta: n_rot = 128
llm_load_print_meta: n_gqa = 1
llm_load_print_meta: f_norm_eps = 1.0e-05
llm_load_print_meta: f_norm_rms_eps = 1.0e-05
llm_load_print_meta: n_ff = 13824
llm_load_print_meta: freq_base = 10000.0
llm_load_print_meta: freq_scale = 1
llm_load_print_meta: model type = 13B
llm_load_print_meta: model ftype = mostly Q4_0
llm_load_print_meta: model size = 13.02 B
llm_load_print_meta: general.name = LLaMA v2
llm_load_print_meta: BOS token = 1 '<s>'
llm_load_print_meta: EOS token = 2 '</s>'
llm_load_print_meta: UNK token = 0 '<unk>'
llm_load_print_meta: LF token = 13 '<0x0A>'
llm_load_tensors: ggml ctx size = 0.11 MB
llm_load_tensors: mem required = 7024.01 MB (+ 400.00 MB per state)
...................................................................................................
llama_new_context_with_model: kv self size = 400.00 MB
llama_new_context_with_model: compute buffer total size = 75.41 MB
system_info: n_threads = 16 / 24 | AVX = 0 | AVX2 = 0 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | VSX = 0 |
sampling: repeat_last_n = 64, repeat_penalty = 1.100000, presence_penalty = 0.000000, frequency_penalty = 0.000000, top_k = 40, tfs_z = 1.000000, top_p = 0.950000, typical_p = 1.000000, temp = 0.800000, mirostat = 0, mirostat_lr = 0.100000, mirostat_ent = 5.000000
generate: n_ctx = 512, n_batch = 512, n_predict = 400, n_keep = 0
Building a website can be done in 10 simple steps:
Step 1: Find the right website platform.
Step 2: Choose your domain name and hosting plan.
Step 3: Design your website layout.
Step 4: Write your website content and add images.
Step 5: Install security features to protect your site from hackers or spammers
Step 6: Test your website on multiple browsers, mobile devices, operating systems etc…
Step 7: Test it again with people who are not related to you personally – friends or family members will work just fine!
Step 8: Start marketing and promoting the website via social media channels or paid ads
Step 9: Analyze how many visitors have come to your site so far, what type of people visit more often than others (e.g., men vs women) etc…
Step 10: Continue to improve upon all aspects mentioned above by following trends in web design and staying up-to-date on new technologies that can enhance user experience even further!
How does a Website Work?
A website works by having pages, which are made of HTML code. This code tells your computer how to display the content on each page you visit – whether it’s an image or text file (like PDFs). In order for someone else’s browser not only be able but also want those same results when accessing any given URL; some additional steps need taken by way of programming scripts that will add functionality such as making links clickable!
The most common type is called static HTML pages because they remain unchanged over time unless modified manually (either through editing files directly or using an interface such as WordPress). They are usually served up via HTTP protocols – this means anyone can access them without having any special privileges like being part of a group who is allowed into restricted areas online; however, there may still exist some limitations depending upon where one lives geographically speaking.
How to
llama_print_timings: load time = 576.45 ms
llama_print_timings: sample time = 283.10 ms / 400 runs ( 0.71 ms per token, 1412.91 tokens per second)
llama_print_timings: prompt eval time = 599.83 ms / 19 tokens ( 31.57 ms per token, 31.68 tokens per second)
llama_print_timings: eval time = 24513.59 ms / 399 runs ( 61.44 ms per token, 16.28 tokens per second)
llama_print_timings: total time = 25431.49 ms
無疑,這三款工具各具特色,但同時也存在一些共通之處。它們都基于完全開源的架構(gòu),代碼和模型細節(jié)對開發(fā)者透明,有利于吸引更多貢獻者加入,共同推動生態(tài)系統(tǒng)的繁榮發(fā)展。此外,它們均支持跨平臺、跨硬件環(huán)境的部署,確保無論用戶使用何種設(shè)備,都能獲得一致優(yōu)質(zhì)的本地 LLM 體驗。
最值得一提的是,這些工具都為用戶保留了對本地 LLM 的完全所有權(quán)和控制權(quán)。無需像使用云服務(wù)那樣將隱私數(shù)據(jù)托付于第三方,用戶可以完全掌控本地模型的輸入輸出,避免潛在的數(shù)據(jù)泄露風險,充分保障數(shù)據(jù)和知識產(chǎn)權(quán)的安全。
Reference :
- [1] https://github.com/ollama/ollama?tab=readme-ov-file#ollama
- [2] https://github.com/nomic-ai/gpt4all
- [3] https://github.com/ggerganov/llama.cpp?tab=readme-ov-file