路線圖/專案狀態/宣言/ggml
在純 C/C++ 中推斷 Meta 的 LLaMA 模型(及其他模型)
libllama
API 的變更日誌
llama-server
REST API 的變更日誌
介紹 GGUF-my-LoRA #10123
Hugging Face Inference Endpoints 現在支援 GGUF 開箱即用!第9669章
擁抱臉GGUF編輯:討論|工具
llama.cpp
的主要目標是在本地和雲端的各種硬體上以最少的設定和最先進的效能實現 LLM 推理。
沒有任何依賴的純 C/C++ 實現
Apple 晶片是一等公民 - 透過 ARM NEON、Accelerate 和 Metal 框架進行最佳化
針對 x86 架構的 AVX、AVX2、AVX512 和 AMX 支持
1.5 位元、2 位元、3 位元、4 位元、5 位元、6 位元和 8 位元整數量化,可加快推理速度並減少記憶體使用
用於在 NVIDIA GPU 上執行 LLM 的自訂 CUDA 核心(透過 HIP 支援 AMD GPU,透過 MUSA 支援摩爾執行緒 MTT GPU)
Vulkan 和 SYCL 後端支持
CPU+GPU 混合推理,部分加速大於 VRAM 總容量的模型
自啟動以來,由於許多貢獻,該專案已取得顯著改進。它是為 ggml 庫開發新功能的主要場所。
支援型號:
通常也支援以下基本模型的微調。
駱駝?
駱駝 2 ??
駱駝 3 ???
米斯特拉爾7B
混合教育部
資料庫接收
鷸
中國 LLaMA / 羊駝和中國 LLaMA-2 / Alpaca-2
維戈涅(法國)
伯特
無尾熊
百川1&2+推導
天鷹座 1 和 2
Starcoder 型號
重構
MPT
盛開
彝族模特兒
穩定的LM模型
Deepseek 模型
奎文型號
PLAMo-13B
Φ型號
GPT-2
獵戶座14B
實習生LM2
程式碼外殼
芽
曼巴
格羅克-1
Xverse
Command-R 型號
海獅
GritLM-7B + GritLM-8x7B
OLMo
奧爾教育部
花崗岩模型
GPT-NeoX + Pythia
雪花-北極教育部
史矛革
波羅34B
比特網b1.58型號
水果餡餅T5
開啟 Elm 模型
聊天GLM3-6b + 聊天GLM4-9b
斯莫爾LM
EXAONE-3.0-7.8B-指導
FalconMamba 模型
賈伊斯
Bielik-11B-v2.3
RWKV-6
(支援更多模型說明:HOWTO-add-model.md)
多式聯運模型:
LLaVA 1.5 型號、LLaVA 1.6 型號
巴克拉瓦
黑曜石
分享GPT4V
MobileVLM 1.7B/3B 型號
易-VL
迷你每千次曝光費用
月夢
兔子
綁定:
Python:abetlen/llama-cpp-python
去:go-skynet/go-llama.cpp
Node.js:withcatai/node-llama-cpp
JS/TS(llama.cpp 伺服器客戶端):lgrammel/modelfusion
JS/TS(可程式提示引擎CLI):offline-ai/cli
JavaScript/Wasm(在瀏覽器中工作):tangledgroup/llama-cpp-wasm
Typescript/Wasm(更好的 API,可在 npm 上使用):ngxson/wllama
紅寶石:yoshoku/llama_cpp.rb
Rust(更多功能):edgenai/llama_cpp-rs
Rust(更好的 API):mdrokz/rust-llama.cpp
Rust(更直接的綁定):utilityai/llama-cpp-rs
C#/.NET:SciSharp/LLamaSharp
C#/VB.NET(更多功能 - 社群授權):LM-Kit.NET
Scala 3:donderom/llm4s
Clojure:phronmophobic/llama.clj
React Native:mybigday/llama.rn
Java:kherud/java-llama.cpp
Zig:deins/llama.cpp.zig
顫振/Dart:netdur/llama_cpp_dart
PHP(基於 llama.cpp 建立的 API 綁定和功能):distantmagic/resonance(更多資訊)
欺騙方案:guile_llama_cpp
斯威夫特 srgtuszy/llama-cpp-swift
Swift盛海王/SwiftLlama
使用者介面:
除非另有說明,這些項目都是開源的,並且具有許可:
MindWorkAI/AI-Studio (FSL-1.1-MIT)
iohub/科拉馬
一月/一月 (AGPL)
nat/開放遊樂場
法拉第(專有)
LMStudio(專有)
萊拉(專有)
拉馬拉馬(麻省理工學院)
本地人工智慧(麻省理工學院)
失落的廢墟/koboldcpp (AGPL)
Mozilla-Ocho/llamafile
nomic-ai/gpt4all
奧拉馬
oobabooga/文本生成-webui (AGPL)
杉原/FreeChat
cztomsik/ava (麻省理工學院)
埃梅爾塔爾
pythops/tenere (AGPL)
RAGNA 桌面(專有)
RecurseChat(專有)
森佩萊/阿米卡
卡泰
移動人工智慧/女傭(麻省理工學院)
女士(專有)
法學碩士農場(麻省理工學院)
KanTV(Apachev2.0或更高版本)
點 (GPL)
MindMac(專有)
KodiBot (GPL)
伊娃(麻省理工學院)
AI Sublime Text 外掛程式 (MIT)
AIKit(麻省理工學院)
LARS - 法學碩士和高級參考解決方案 (AGPL)
聯合法學碩士(麻省理工學院)
駱駝助理 (GPL)
PocketPal AI - iOS 和 Android 應用程式 (MIT)
(要在這裡列出一個項目,應該明確說明它依賴llama.cpp
)
工具:
akx/ggify – 從 HuggingFace Hub 下載 PyTorch 模型並將其轉換為 GGML
akx/ollama-dl – 從 Ollama 庫下載模型以直接與 llama.cpp 一起使用
crashr/gppm – 利用 NVIDIA Tesla P40 或 P100 GPU 啟動 llama.cpp 實例,並降低閒置功耗
gpustack/gguf-parser - 查看/檢查 GGUF 檔案並估計記憶體使用情況
Styled Lines(專有許可的推理部分非同步包裝器,用於 Unity3d 中的遊戲開發,帶有預先建構的行動和 Web 平台包裝器和模型範例)
基礎設施:
Paddler - 為 llama.cpp 定制的有狀態負載平衡器
GPUStack - 管理用於運行 LLM 的 GPU 集群
llama_cpp_canister - llama.cpp 作為網路電腦上的智慧合約,使用 WebAssembly
遊戲:
露西的迷宮 - 一款簡單的迷宮遊戲,由人工智慧模型控制的代理將試圖欺騙你。
$ make -j && ./llama-cli -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
這是另一個在單一 M1 Pro MacBook 上執行 LLaMA-7B 和 tweet.cpp 的示範:
以下是大多數受支援模型的端到端二進位建置和模型轉換步驟。
首先,您需要取得二進位檔案。您可以遵循不同的方法:
方法1:克隆此存儲庫並在本地構建,查看如何構建
方法2:如果您使用MacOS或Linux,您可以透過brew、flox或nix安裝llama.cpp
方法3:使用Docker映像,請參閱Docker文檔
方法 4:從版本下載預先建置的二進位文件
您可以使用以下命令運行基本完成:
llama-cli -m your_model.gguf -p "我相信生命的意義是" -n 128# 輸出:# 我相信生命的意義就是找到你自己的真理並按照它生活。對我來說,這意味著忠於自己並追隨自己的熱情,即使它們與社會期望不符。我想這就是我喜歡瑜珈的原因——它不僅是一種身體練習,也是一種精神練習。這是關於與自己聯繫,傾聽內心的聲音,並尊重自己獨特的旅程。
有關參數的完整列表,請參閱此頁。
如果您想要更像 ChatGPT 的體驗,可以透過傳遞-cnv
作為參數以對話模式運作:
llama-cli -m your_model.gguf -p "你是個有用的助手" -cnv# 輸出:# > 嗨,你是誰?我是你的得力助手!我是一個人工智慧驅動的聊天機器人,旨在為像您這樣的用戶提供幫助和資訊。我來這裡是為了幫助回答您的問題,提供指導,並就廣泛的主題提供支援。我是一個友好且知識淵博的人工智慧,我總是很樂意為您提供任何需要的幫助。您在想什麼? 今天我能為您提供什麼幫助? 1+1的答案是…2!
預設情況下,聊天範本將從輸入模型中取得。如果您想使用其他聊天模板,請傳遞--chat-template NAME
作為參數。查看支援的模板列表
./llama-cli -m your_model.gguf -p "你是個有用的助手" -cnv --chat-template chatml
您也可以透過 in-prefix、in-suffix 和反向提示參數使用自己的範本:
./llama-cli -m your_model.gguf -p "你是個有用的助手" -cnv --in-prefix '使用者:' --reverse-prompt '使用者:'
llama.cpp Web 伺服器是一個輕量級 OpenAI API 相容的 HTTP 伺服器,可用於服務本機模型並輕鬆將它們連接到現有用戶端。
用法範例:
./llama-server -m your_model.gguf --port 8080# 可以透過瀏覽器存取基本 Web UI:http://localhost:8080# 聊天完成端點:http://localhost:8080/v1/chat/completions
筆記
如果您喜歡基本使用,請考慮使用對話模式而不是互動模式
在此模式下,您始終可以透過按 Ctrl+C 並輸入一行或多行文字來中斷生成,這些文字將轉換為標記並附加到當前上下文。您也可以使用參數-r "reverse prompt string"
指定反向提示。這將導致每當在生成過程中遇到反向提示字串的確切標記時就會提示使用者輸入。典型的用途是使用提示,讓 LLaMA 模擬多個使用者(例如 Alice 和 Bob)之間的聊天,並傳遞-r "Alice:"
。
這是使用命令調用的幾次交互的範例
# 使用7B 模型的預設參數./examples/chat.sh# 使用13B 模型的進階聊天./examples/chat-13B.sh# 使用13B 模型的自訂參數./llama-cli -m ./models/13B / ggml-model-q4_0.gguf -n 256 --repeat_penalty 1.0 --color -i -r「使用者:」-f提示/chat-with-bob.txt
請注意使用--color
來區分使用者輸入和產生的文字。其他參數在llama-cli
範例程式的自述文件中有更詳細的解釋。
透過利用--prompt-cache
和--prompt-cache-all
,可以在呼叫./llama-cli
時保存和恢復提示、使用者輸入和模型生成。 ./examples/chat-persistent.sh
腳本透過對長時間運行、可恢復的聊天會話的支援來演示這一點。要使用此範例,您必須提供一個檔案來快取初始聊天提示和一個目錄來保存聊天會話,並且可以選擇提供與chat-13B.sh
相同的變數。新的聊天會話可以重複使用相同的提示快取。請注意,提示快取和聊天目錄都與初始提示 ( PROMPT_TEMPLATE
) 和模型檔案相關聯。
# 開始一個新的聊天PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat-persistent.sh# 恢復chatPROMPT_CACHE_FILE=chat.prompAVE.bin CHAT_SPdefchat/ex/chat. - persist.sh# 使用相同的提示啟動不同的聊天/modelPROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/another ./examples/chat-persistent.sh# 不同的提示使用不同的提示快取/modelPROMPT_TEMPLATE=. /prompts/ chat-with-bob.txt PROMPT_CACHE_FILE=bob.prompt.bin CHAT_SAVE_DIR=./chat/bob ./examples/chat-persistent.sh
llama.cpp
支援約束模型輸出的語法。例如,您可以強制模型僅輸出 JSON:
./llama-cli -m ./models/13B/ggml-model-q4_0.gguf -n 256 --grammar-file Grammars/json.gbnf -p '請求:安排晚上 8 點通話;命令:'
grammars/
資料夾包含一些範例語法。要編寫自己的,請查看 GBNF 指南。
要編寫更複雜的JSON 語法,您還可以查看https://grammar.intrinsiclabs.ai/,這是一個瀏覽器應用程序,可讓您編寫TypeScript 接口,並將其編譯為GBNF 語法,您可以保存以供本地使用。請注意,該應用程式是由社群成員建置和維護的,請在其儲存庫(而不是此儲存庫)上提交任何問題或 FR。
請參考本地Build llama.cpp
後端 | 目標裝置 |
---|---|
金屬 | 蘋果矽 |
BLAS | 全部 |
BLIS | 全部 |
SYCL | 英特爾和 Nvidia GPU |
穆薩 | 摩爾線程 MTT GPU |
CUDA | 英偉達顯示卡 |
髖關節BLAS | AMD顯示卡 |
伏爾甘 | 圖形處理器 |
坎恩 | 升騰NPU |
筆記
您也可以使用 Hugging Face 上的 GGUF-my-repo 空間來量化模型權重,而無需任何設定。它每 6 小時從llama.cpp
main 同步一次。
若要取得官方 LLaMA 2 權重,請參閱取得和使用 Facebook LLaMA 2 模型部分。 Hugging Face 上還有大量可供選擇的預量化gguf
模型。
注意: convert.py
已移至examples/convert_legacy_llama.py
,並且不應用於Llama/Llama2/Mistral
模型及其衍生模型之外的任何內容。它不支援LLaMA 3,您可以將convert_hf_to_gguf.py
與從Hugging Face下載的LLaMA 3一起使用。
要了解有關量化模型的更多信息,請閱讀此文檔
您可以使用perplexity
範例來衡量給定提示的困惑度(困惑度越低越好)。有關更多信息,請參閱 https://huggingface.co/docs/transformers/perplexity。
要了解如何使用 llama.cpp 測量困惑度的更多信息,請閱讀此文檔
貢獻者可以打開 PR
協作者可以推送到llama.cpp
儲存庫中的分支並將 PR 合併到master
分支中
將根據貢獻邀請合作者
非常感謝您在管理問題、PR 和專案方面提供的任何幫助!
請參閱良好的第一期,以了解適合首次貢獻的任務
閱讀 CONTRIBUTING.md 以了解更多信息
請務必閱讀以下內容:邊緣推理
為有興趣的人提供一些背景故事:Changelog podcast
主要(命令列介面)
伺服器
危險
GBNF語法
開發文件
如何建造
在 Docker 上運行
在 Android 上建置
性能故障排除
GGML 提示和技巧
開創性論文與模型背景
如果您的問題在於模型生成質量,那麼請至少掃描以下連結和論文以了解 LLaMA 模型的局限性。當選擇合適的模型大小並了解 LLaMA 模型和 ChatGPT 之間的顯著和細微差異時,這一點尤其重要:
駱駝:
LLaMA 簡介:一個具有 650 億參數的基礎大型語言模型
LLaMA:開放高效率的基礎語言模型
GPT-3
語言模型是小樣本學習者
GPT-3.5 / InstructGPT / ChatGPT:
調整語言模型以遵循指令
訓練語言模型遵循人類回饋的指令