路线图/项目状态/宣言/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?# 简单! 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# 恢复聊天PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat- persist.sh# 使用相同的内容开始不同的聊天Prompt/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.提示.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:
调整语言模型以遵循指令
训练语言模型遵循人类反馈的指令