llama.cpp

news/2024/8/26 16:57:10 标签: llama, llama.cpp, 大模型, 量化

文章目录

    • 一、关于 llama.cpp
      • 支持的模型:
      • Multimodal models:
      • Bindings:
      • UI:
      • Tools:
    • 二、Demo
      • 1、Typical run using LLaMA v2 13B on M2 Ultra
      • 2、Demo of running both LLaMA-7B and whisper.cpp on a single M1 Pro MacBook
    • 三、用法
      • 1、基本用法
      • 2、对话模式
      • 3、网络服务
      • 4、交互模式
      • 5、持久互动
      • 6、语法约束输出
    • 四、构建
    • 五、支持的后端
    • 六、工具
      • 1、准备和量化
      • 2、困惑(测量模型质量)
    • 七、其他文件


llamacpp_2">一、关于 llama.cpp

  • github : https://github.com/ggerganov/llama.cpp
  • Roadmap / Project status / Manifesto / ggml

llama.cpp的主要目标是 使LLM推理 具有最少的设置和最先进的性能,在各种硬件–本地和云端。

  • 没有任何依赖关系的普通C/C++实现
  • Apple silicon 是一等公民 – 通过ARM NEON、Accelerate和Metal框架进行优化
  • AVX、AVX2和AVX512支持x86架构
  • 1.5位、2位、3位、4位、5位、6位和8位整数量化,用于更快的推理和减少内存使用
  • 用于在NVIDIA GPU上运行LLM的自定义CUDA内核(通过HIP支持AMD GPU)
  • Vulkan和SYCL后端支持
  • CPU+GPU 混合推断 部分加速模型大于总VRAM容量

自启动以来,由于许多 contributions,该项目有了显著改善。
它是为ggml库 开发新功能的主要场所。


支持的模型:

通常也支持下面基本模型的细调。

  • LLaMA 🦙
  • LLaMA 2 🦙🦙
  • LLaMA 3 🦙🦙🦙
  • Mistral 7B
  • Mixtral MoE
  • DBRX
  • Falcon
  • Chinese LLaMA / Alpaca and Chinese LLaMA-2 / Alpaca-2
  • Vigogne (French)
  • BERT
  • Koala
  • Baichuan 1 & 2 + derivations
  • Aquila 1 & 2
  • Starcoder models
  • Refact
  • MPT
  • Bloom
  • Yi models
  • StableLM models
  • Deepseek models
  • Qwen models
  • PLaMo-13B
  • Phi models
  • GPT-2
  • Orion 14B
  • InternLM2
  • CodeShell
  • Gemma
  • Mamba
  • Grok-1
  • Xverse
  • Command-R models
  • SEA-LION
  • GritLM-7B + GritLM-8x7B
  • OLMo
  • GPT-NeoX + Pythia
  • ChatGLM3-6b + ChatGLM4-9b

(instructions for supporting more models: HOWTO-add-model.md)


Multimodal models:

  • LLaVA 1.5 models, LLaVA 1.6 models
  • BakLLaVA
  • Obsidian
  • ShareGPT4V
  • MobileVLM 1.7B/3B models
  • Yi-VL
  • Mini CPM
  • Moondream
  • Bunny

Bindings:

  • Python: abetlen/llama-cpp-python
  • Go: go-skynet/go-llama.cpp
  • Node.js: withcatai/node-llama-cpp
  • JS/TS (llama.cpp server client): lgrammel/modelfusion
  • JavaScript/Wasm (works in browser): tangledgroup/llama-cpp-wasm
  • Typescript/Wasm (nicer API, available on npm): ngxson/wllama
  • Ruby: yoshoku/llama_cpp.rb
  • Rust (more features): edgenai/llama_cpp-rs
  • Rust (nicer API): mdrokz/rust-llama.cpp
  • Rust (more direct bindings): utilityai/llama-cpp-rs
  • C#/.NET: SciSharp/LLamaSharp
  • Scala 3: donderom/llm4s
  • Clojure: phronmophobic/llama.clj
  • React Native: mybigday/llama.rn
  • Java: kherud/java-llama.cpp
  • Zig: deins/llama.cpp.zig
  • Flutter/Dart: netdur/llama_cpp_dart
  • PHP (API bindings and features built on top of llama.cpp): distantmagic/resonance (more info)
  • Guile Scheme: guile_llama_cpp

UI:

除非另有说明,否则这些项目是具有许可的开源项目:

  • iohub/collama
  • janhq/jan (AGPL)
  • nat/openplayground
  • Faraday (proprietary)
  • LMStudio (proprietary)
  • Layla (proprietary)
  • LocalAI (MIT)
  • LostRuins/koboldcpp (AGPL)
  • Mozilla-Ocho/llamafile
  • nomic-ai/gpt4all
  • ollama/ollama
  • oobabooga/text-generation-webui (AGPL)
  • psugihara/FreeChat
  • cztomsik/ava (MIT)
  • ptsochantaris/emeltal
  • pythops/tenere (AGPL)
  • RAGNA Desktop (proprietary)
  • RecurseChat (proprietary)
  • semperai/amica
  • withcatai/catai
  • Mobile-Artificial-Intelligence/maid (MIT)
  • Msty (proprietary)
  • LLMFarm (MIT)
  • KanTV(Apachev2.0 or later)
  • Dot (GPL)
  • MindMac (proprietary)
  • KodiBot (GPL)
  • eva (MIT)
  • AI Sublime Text plugin (MIT)
  • AIKit (MIT)
  • LARS - The LLM & Advanced Referencing Solution (AGPL)

(要在此处列出一个项目,它应该明确说明它依赖于 llama.cpp)


Tools:

  • akx/ggify – 从 HuggingFace Hub 下载 PyTorch 模型,然后转化他们到 GGML
  • crashr/gppm – 使用 NVIDIA Tesla P40 或 P100 GPU 加载 llama.cpp实例,降低空闲功耗

Infrastructure:

  • Paddler - 为llama.cpp定制的状态负载均衡器

二、Demo


1、Typical run using LLaMA v2 13B on M2 Ultra

$ 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


2、Demo of running both LLaMA-7B and whisper.cpp on a single M1 Pro MacBook

这是运行LLaMA-7B和 whisper.cpp 的另一个演示,在一台M1 Pro MacBook上:

https://private-user-images.githubusercontent.com/1991296/224442907-7693d4be-acaa-4e01-8b4f-add84093ffff.mp4


三、用法

以下是大多数受支持模型的 端到端二进制构建 和 模型转换步骤。


1、基本用法

首先,您需要获取二进制文件。您可以遵循不同的方法:

  • 方法一:克隆此仓库并本地构建,看如何构建
  • 方法二:如果你使用的是MacOS或Linux,你可以通过brew、flox或nix 安装 llama. cpp
  • 方法3:使用Docker镜像,见为Docker留档
  • 方法4:从 releases 下载预构建二进制

您可以使用以下命令运行基本完成:

llama-cli -m your_model.gguf -p "I believe the meaning of life is" -n 128

# Output:
# I believe the meaning of life is to find your own truth and to live in accordance with it. For me, this means being true to myself and following my passions, even if they don't align with societal expectations. I think that's what I love about yoga – it's not just a physical practice, but a spiritual one too. It's about connecting with yourself, listening to your inner voice, and honoring your own unique journey.

有关参数的完整列表,请参阅此页面。


2、对话模式

如果您想要更ChatGPT的体验,可以通过将-cnv作为参数传递来 在对话模式下运行:

llama-cli -m your_model.gguf -p "You are a helpful assistant" -cnv

# Output:
# > hi, who are you?
# Hi there! I'm your helpful assistant! I'm an AI-powered chatbot designed to assist and provide information to users like you. I'm here to help answer your questions, provide guidance, and offer support on a wide range of topics. I'm a friendly and knowledgeable AI, and I'm always happy to help with anything you need. What's on your mind, and how can I assist you today?
#
# > what is 1+1?
# Easy peasy! The answer to 1+1 is... 2!

默认情况下,聊天模板将取自输入模型。如果要使用另一个聊天模板,传递--chat-template NAME参数。查看支持模板

./llama-cli -m your_model.gguf -p "You are a helpful assistant" -cnv --chat-template chatml

您还可以通过前缀、后缀 和 反向提示参数 使用自己的模板:

./llama-cli -m your_model.gguf -p "You are a helpful assistant" -cnv --in-prefix 'User: ' --reverse-prompt 'User:'

3、网络服务

llama. cpp Web服务是一个轻量级的OpenAI API兼容HTTP服务器,可用于服务本地模型 并轻松将它们连接到现有客户端。

示例用法:

./llama-server -m your_model.gguf --port 8080

# Basic web UI can be accessed via browser: http://localhost:8080
# Chat completion endpoint: http://localhost:8080/v1/chat/completions

4、交互模式

注:如果您更喜欢基本用法,请考虑使用对话模式而不是交互模式

在这种模式下,您始终可以通过按Ctrl+C,并输入一行或多行文本来中断生成,这些文本将被转换为 tokens 并附加到当前上下文中。

您还可以使用参数-r "reverse prompt string"指定反向提示。这将导致每当在生成中遇到反向提示字符串的确切 tokens 时都会提示用户输入。

一个典型的用途是使用一个提示,使LLaMA模拟多个用户之间的聊天,比如说Alice和Bob,并传递-r "Alice:"

这是一个使用命令调用的 few-shot 交互示例

# default arguments using a 7B model
./examples/chat.sh

# advanced chat with a 13B model
./examples/chat-13B.sh

# custom arguments using a 13B model
./llama-cli -m ./models/13B/ggml-model-q4_0.gguf -n 256 --repeat_penalty 1.0 --color -i -r "User:" -f prompts/chat-with-bob.txt

注意使用--color来区分用户输入和生成的文本。

llama-cli示例程序的README中更详细地解释了其他参数。


在这里插入图片描述


5、持久互动

提示符、用户输入和模型代可以通过调用./llama-cli来保存和恢复--prompt-cache--prompt-cache-all./examples/chat-persistent.sh脚本演示了这一点,支持长时间运行的、可恢复的聊天会话。

要使用此示例,您必须提供一个文件来缓存初始聊天提示符和一个目录来保存聊天会话,并且可以选择提供与chat-13B.sh相同的提示缓存可以重复用于新的聊天会话。

请注意,提示缓存和聊天目录都绑定到初始提示符(PROMPT_TEMPLATE)和模型文件。

# Start a new chat
PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat-persistent.sh

# Resume that chat
PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat-persistent.sh

# Start a different chat with the same prompt/model
PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/another ./examples/chat-persistent.sh

# Different prompt cache for different prompt/model
PROMPT_TEMPLATE=./prompts/chat-with-bob.txt PROMPT_CACHE_FILE=bob.prompt.bin \
    CHAT_SAVE_DIR=./chat/bob ./examples/chat-persistent.sh

6、语法约束输出

llama.cpp支持约束模型输出的语法。例如,您可以强制模型仅输出JSON:

./llama-cli -m ./models/13B/ggml-model-q4_0.gguf -n 256 --grammar-file grammars/json.gbnf -p 'Request: schedule a call at 8pm; Command:'

grammars/文件夹包含一些示例语法。要编写自己的语法,请查看GBNF指南。

要编写更复杂的JSON语法,您还可以查看https://grammar.intrinsiclabs.ai/,这是一个浏览器应用程序,可让您编写TypeScript接口,并将其编译为GBNF语法,您可以保存以供本地使用。

请注意,该应用程序是由社区成员构建和维护的,请在其存储库上提交任何问题或FR,而不是这个。


四、构建

请参考本地Build llama. cpp


五、支持的后端

BackendTarget devices
MetalApple Silicon
BLASAll
BLISAll
SYCLIntel and Nvidia GPU
CUDANvidia GPU
hipBLASAMD GPU
VulkanGPU

六、工具


1、准备和量化

注:你可以使用Hugging Face 上的 GGUF-my-repo空间 量化你的模型权重,不需要任何设置。它每6小时从llama.cpp同步一次。

要获得官方的LLaMA 2权重,请参阅 Obtaining and using the Facebook LLaMA 2 model 部分。

Hugging Face 上还有大量预量化gguf模型可供选择。

注意:convert.py已移至examples/convert_legacy_llama.py,不应用于Llama/Llama2/Mistral模型及其衍生产品以外的任何内容。 它不支持 LLaMA 3,您可以使用convert_hf_to_gguf.py从 Hugging Face 下载 LLaMA 3。

要了解有关量化模型的更多信息,请阅读此留档


2、困惑(测量模型质量)

您可以使用perplexity示例 来测量给定提示的困惑(困惑程度越低越好)。

有关详细信息,请参见https://huggingface.co/docs/transformers/perplexity。

要了解更多如何使用llama. cpp测量困惑,请阅读此留档


七、其他文件

  • main (cli)
  • server
  • jeopardy
  • GBNF grammars

开发文件

  • 如何建造
  • 在Docker上运行
  • 基于Android构建
  • 性能故障排除
  • GGML提示和技巧

关于模型的开创性论文和背景

如果您的问题是模型生成质量,那么请至少扫描以下链接和论文以了解LLaMA模型的局限性。在选择适当的模型尺寸并欣赏LLaMA模型和ChatGPT之间的显着和细微差异时,这一点尤其重要:

  • LLaMA
    • 介绍LLaMA:一个基础的、65-billion-parameter的大型语言模型
    • LLaMA:开放高效的基础语言模型
  • GPT-3
    • 语言模型是很少学习者
  • GPT-3.5 / InstructGPT / ChatGPT:
    • 调整语言模型以遵循说明
    • 训练语言模型以遵循人类反馈的说明

2024-07


http://www.niftyadmin.cn/n/5558290.html

相关文章

React Native 自定义 Hook 获取组件位置和大小

在 React Native 中自定义 Hook useLayout 获取 View、Pressable 等组件的位置和大小的信息 import {useState, useCallback} from react import {LayoutChangeEvent, LayoutRectangle} from react-nativeexport function useLayout() {const [layout, setLayout] useState&l…

Modbus转Ethernet/IP网关模块与汇川PLC通讯案例

Modbus转Ethernet/IP网关模块&#xff08;XD-MDEP100&#xff09;是一种用于将Modbus协议转换为Ethernet/IP协议的设备。它可以将Modbus RTU和Modbus TCP两种不同格式的Modbus数据包转换为Ethernet/IP协议的数据包&#xff0c;实现不同厂家的设备之间的数据交换和共享。在汇川P…

【力扣】重排链表

一、题目描述 题目链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 二、解题思路 找到链表的中间节点&#xff0c;将链表分为两部分&#xff08;可使用快慢双指针&#xff09;将后半部分链表逆序&#xff08;双指针或头插法&#xff09;合并两个链表 一定要注意…

debian 实现离线批量安装软件包

前言 实现在线缓冲需要的软件和对应依赖的包&#xff0c;离线进行安装 &#xff0c;用于软件封装。 测试下载一个gcc和依赖环境&#xff0c;关闭默认在线源&#xff0c;测试离线安装gcc和依赖环境 兼容 debian ubuntu/test 测试下载安装包到目录 vim /repo_download.sh #!…

python项目读取oracle数据库方法(cx_Oracle库实现)

目录 创建一个python项目&#xff0c;并配置运行环境 查看oracle对应数据库版本&#xff08;该标题下内容只是为了查看版本&#xff0c;不用在意&#xff09; 从oracle官网下载对应版本的oracle客户端 解压下载的压缩包&#xff0c;并获取依赖 将依赖文件导入python项目运…

基于JAVA+SpringBoot+Vue+uniapp的微信小程序点餐平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 点餐小程序主要为小个…

持续集成06--Jenkins构建触发器

前言 在持续集成&#xff08;CI&#xff09;的实践中&#xff0c;构建触发器是自动化流程中不可或缺的一环。它决定了何时启动构建过程&#xff0c;从而确保代码变更能够及时地得到验证和反馈。Jenkins&#xff0c;作为业界领先的CI/CD工具&#xff0c;提供了多种构建触发器选项…

electron中app.whenReady()和app.on(‘ready‘)的区别

app.whenReady和app.on(‘ready’)都是用于在Electron应用程序中处理初始化完成事件的方法。app.whenReady是一个返回Promise的方法&#xff0c;它会在应用程序准备好创建窗口时解决。一旦app.whenReady被调用&#xff0c;就可以安全地创建窗口&#xff0c;因为此时Electron的初…