使模型类gpt式交互:
./main -m .\models\llama-2-7b-chat\ggml-model-q4_0.gguf -n 256 --repeat_penalty 1.0 --color -i -r "User:" -f prompts\chat-with-bob.txt
或
./main -m .\models\llama-2-7b\ggml-model-q4_0.gguf -n -1 --color -r "User:" --in-prefix " " -i -e -p "User: Hi\nAI: Hello. I am an AI chatbot. Would you like to talk?\nUser: Sure!\nAI: What would you like to talk about?\nUser:"
Windows 4 or 8 bit量化:
.\quantize ./models/llama-2-7b/ggml-model-f16.gguf ./models/llama-2-7b-chat/ggml-model-q4_0.gguf q4_0
.\quantize ./models/llama-2-7b/ggml-model-f16.gguf ./models/llama-2-7b/ggml-model-q8_0.gguf q8_0
gpu加速运行:
加上-ngl 1 范围1-35
-e 处理提示专业序列(\n \r \t \' \" \\)
Common Options常用选项
-m FNAME, --model FNAME
: 指定 LLaMA 模型文件的路径(例如models/7B/ggml-model.bin
).)。
-i, --interactive
:以交互模式运行程序,允许您直接提供输入并接收实时响应。
-ins, --instruct
: 以指令模式运行程序,这在处理羊驼模型时特别有用。
-n N, --n-predict N
: 设置生成文本时预测的tokens数量。调整此值可以影响生成文本的长度。
-c N, --ctx-size N
: 设置提示上下文的大小。默认值为 512,但 LLaMA 模型是在 2048 的上下文中构建的,这将为较长的输入/推理提供更好的结果。
Input Prompts输入提示
--prompt PROMPT
: 直接提供提示作为命令行选项。
--file FNAME
: 提供包含一个或多个提示的文件。
--interactive-first
: 以交互模式运行程序并立即等待输入。 (下面有更多相关内容。)
--random-prompt
: 从随机提示开始。
Interaction相互作用
该"main"程序提供了与 LLaMA 模型交互的无缝方式,允许用户参与实时对话或提供特定任务的说明。可以使用各种选项触发交互模式,包括"--interactive"、 "--interactive-first"、 和"--instruct"。
在交互模式下,用户可以通过在过程中注入输入来参与文本生成。用户可以"Ctrl+C"随时按 插入并输入他们的输入,然后按 将"Return"其提交给 LLaMA 模型。要提交其他行而不最终确定输入,用户可以使用反斜杠 ( "\") 结束当前行并继续输入。
Interaction Options互动选项
-i, --interactive
: 以交互模式运行程序,允许用户进行实时对话或向模型提供特定指令。
--interactive-first
: Run the program in interactive mode and immediately wait for user input before starting the text generation.:以交互模式运行程序并立即等待用户输入,然后开始文本生成。
-ins, --instruct
: 在指令模式下运行程序,该模式专门设计用于羊驼模型,这些模型擅长根据用户指令完成任务。
--color
: 启用彩色输出以在视觉上区分提示、用户输入和生成的文本。
Reverse Prompts反向提示
反向提示是一种通过在遇到特定文本字符串时暂停文本生成来使用 LLaMA 模型创建类似聊天体验的强大方法:
-r PROMPT, --reverse-prompt PROMPT
: 指定一个或多个反向提示以暂停文本生成并切换到交互模式。例如,-r "User:"
可用于在轮到用户说话时跳回对话。这有助于创造更具互动性和对话性的体验。但是,当以空格结尾时,反向提示不起作用。
要克服此限制,您可以使用该"--in-prefix"标志在反向提示符后添加空格或任何其他字符。
In-Prefix前缀内
该"--in-prefix"标志用于向您的输入添加前缀,主要用于在反向提示后插入空格。以下是如何将"--in-prefix"标志与标志结合"--reverse-prompt"使用的示例:
./main -r "User:" --in-prefix " "
In-Suffix后缀内
该"--in-suffix"标志用于在输入后添加后缀。这对于在用户输入后添加“助手:”提示非常有用。它添加在"\n"自动添加到用户输入末尾的换行符 ( ) 之后。以下是如何将"--in-suffix"标志与标志结合"--reverse-prompt"使用的示例:
./main -r "User:" --in-prefix " " --in-suffix "Assistant:"
Instruction Mode指令模式
指令模式在使用 Alpaca 模型时特别有用,这些模型旨在遵循用户指令来执行特定任务:
-ins, --instruct
: 启用指令模式,以利用 Alpaca 模型的功能,根据用户提供的指令完成任务。
技术细节:用户的输入在内部以反向提示为前缀(或"### Instruction:"作为默认提示),后跟"### Response:"(除非您在没有任何输入的情况下按回车键,以继续生成更长的响应)。
Context Management上下文管理
在文本生成过程中,LLaMA 模型的上下文大小有限,这意味着它们只能考虑输入和生成文本中的一定数量的标记。当上下文填满时,模型会在内部重置,可能会丢失对话或指令开始时的一些信息。上下文管理选项有助于在这些情况下保持连续性和连贯性。
Context Size上下文大小
-c N, --ctx-size N
: 设置提示上下文的大小(默认:512)。 LLaMA 模型是在 2048 的背景下构建的,这将在较长的输入/推理上产生最佳结果。然而,将上下文大小增加到超过 2048 可能会导致不可预测的结果。
Extended Context Size扩展上下文大小
一些微调模型通过缩放 RoPE 来延长上下文长度。例如,如果原始预训练模型的上下文长度(最大序列长度)为 4096 (4k),而微调模型的上下文长度为 32k。这是一个 8 的缩放因子,并且应该通过将上面的值设置"--ctx-size"为 32768 (32k) 和"--rope-scale"8 来工作。
--rope-scale N
: 其中 N 是微调模型使用的线性比例因子。
Keep Prompt保持及时
该"--keep"选项允许用户在模型运行脱离上下文时保留原始提示,从而确保保持与初始指令或对话主题的连接。
--keep N
: 指定模型重置其内部上下文时要保留的初始提示中的标记数量。默认情况下,该值设置为 0(意味着不保留令牌)。用于-1
to retain all tokens from the initial prompt.保留初始提示中的所有标记。
通过利用"--ctx-size"和等上下文管理选项"--keep",您可以与 LLaMA 模型保持更加连贯一致的交互,确保生成的文本与原始提示或对话保持相关。
Generation Flags世代标志
以下选项允许您控制文本生成过程,并根据您的需要微调生成文本的多样性、创造力和质量。通过调整这些选项并尝试不同的值组合,您可以找到适合您的特定用例的最佳设置。
Number of Tokens to Predict要预测的令牌数量
-n N, --n-predict N
:设置生成文本时要预测的标记数量(默认值:128,-1 = 无穷大,-2 = 直到上下文填充)
该"--n-predict"选项控制模型响应输入提示生成的标记数量。通过调整此值,您可以影响生成文本的长度。较高的值将生成较长的文本,而较低的值将生成较短的文本。
即使我们的上下文窗口有限, -1 的值也将启用无限文本生成。当上下文窗口已满时,一些较早的令牌( 后的令牌的一半"--n-keep")将被丢弃。然后必须重新评估上下文,然后才能恢复生成。在大型模型和/或大型上下文窗口上,这将导致输出显着暂停。
如果不希望出现暂停,则值 -2 将在上下文填满时立即停止生成。
需要注意的是,如果遇到序列结束 (EOS) 标记或反向提示,生成的文本可能会短于指定的标记数量。在交互模式下,文本生成将暂停,控制权将返回给用户。在非交互模式下,程序将结束。在这两种情况下,文本生成可能会在达到指定"n-predict"值之前停止。如果您希望模型继续运行而不自行产生序列结束,则可以使用该"--ignore-eos"参数。
Temperature温度
--temp N
: 调整生成文本的随机性(默认:0.8)。
温度是一个超参数,控制生成文本的随机性。它影响模型输出标记的概率分布。较高的温度(例如,1.5)使输出更加随机和创造性,而较低的温度(例如,0.5)使输出更加集中、确定性和保守。默认值为 0.8,它提供了随机性和确定性之间的平衡。在极端情况下,温度为 0 时将始终选择最有可能的下一个标记,从而在每次运行中产生相同的输出。
Example usage: --temp 0.5
Repeat Penalty重复处罚
--repeat-penalty N
: 控制生成文本中标记序列的重复(默认值:1.1)。
--repeat-last-n N
: 用于惩罚重复的最后 n 个标记(默认值:64,0 = 禁用,-1 = ctx-size)。
--no-penalize-nl
: 应用重复惩罚时禁用换行标记的惩罚。
该"repeat-penalty"选项有助于防止模型生成重复或单调的文本。较高的值(例如,1.5)将更强烈地惩罚重复,而较低的值(例如,0.9)将更宽松。默认值为 1.1。
该"repeat-last-n"选项控制历史记录中考虑惩罚重复的标记数量。较大的值将在生成的文本中进一步查找以防止重复,而较小的值将仅考虑最近的标记。值为 0 会禁用惩罚,值为 -1 会将标记数量设置为等于上下文大小 ( "ctx-size")。
使用该"--no-penalize-nl"选项在应用重复惩罚时禁用换行惩罚。此选项对于生成聊天对话、对话、代码、诗歌或换行符在结构和格式中发挥重要作用的任何文本特别有用。禁用换行惩罚有助于在这些特定用例中保持自然流程和预期格式。
Example usage: --repeat-penalty 1.15 --repeat-last-n 128 --no-penalize-nl
Top-K SamplingTop-K 采样
--top-k N
: 将下一个标记选择限制为 K 个最可能的标记(默认值:40)。
Top-k 采样是一种文本生成方法,仅从模型预测的前 k 个最有可能的标记中选择下一个标记。它有助于降低生成低概率或无意义代币的风险,但也可能限制输出的多样性。 top-k 的较高值(例如,100)将考虑更多标记并导致更多样化的文本,而较低值(例如,10)将关注最可能的标记并生成更保守的文本。默认值为 40。
Example usage: --top-k 30
用法示例:
Top-P SamplingTop-P 采样
--top-p N
: 将下一个标记选择限制为累积概率高于阈值 P(默认值:0.9)的标记子集。
Top-p 采样,也称为核心采样,是另一种文本生成方法,它从累积概率至少为 p 的标记子集中选择下一个标记。该方法通过考虑令牌的概率和采样的令牌数量来提供多样性和质量之间的平衡。 top-p 的较高值(例如,0.95)将导致更加多样化的文本,而较低的值(例如,0.5)将生成更加集中和保守的文本。默认值为 0.9。
Example usage: --top-p 0.95
Min P Sampling最小 P 采样
--min-p N
: 设置令牌选择的最小基本概率阈值(默认值:0.05)。
Min-P 抽样方法被设计为 Top-P 的替代方法,旨在确保质量和品种的平衡。参数p表示要考虑的令牌的最小概率,相对于最可能的令牌的概率。例如,当p = 0.05 且最有可能的 token 的概率为 0.9 时,值小于 0.045 的 logits 将被过滤掉。
Example usage: --min-p 0.05
Tail Free Sampling (TFS)无尾采样 (TFS)
--tfs N
: 使用参数 z 启用无尾采样(默认值:1.0,1.0 = 禁用)。
无尾采样 (TFS) 是一种文本生成技术,旨在减少不太可能的标记对输出的影响,这些标记可能不太相关、不太连贯或无意义。与 Top-P 类似,它尝试动态确定大部分最可能的标记。但 TFS 根据概率的二阶导数过滤掉 logits。当二阶导数之和达到参数 z 后,停止添加标记。简而言之:TFS 查看令牌的概率下降的速度,并使用参数 z 切断不太可能的令牌的尾部。 z 的典型值在 0.9 至 0.95 范围内。值 1.0 将包括所有令牌,从而禁用 TFS 的效果。
Example usage: --tfs 0.95
Locally Typical Sampling当地典型抽样
--typical N
: 使用参数 p 启用局部典型采样(默认值:1.0,1.0 = 禁用)。
局部典型采样通过对基于周围上下文的典型或预期的标记进行采样,促进上下文连贯且多样化的文本的生成。通过将参数 p 设置在 0 和 1 之间,您可以控制生成局部连贯和多样化的文本之间的平衡。接近 1 的值将促进上下文更加一致的标记,而接近 0 的值将促进更加多样化的标记。等于 1 的值将禁用本地典型采样。
Example usage: --typical 0.9
Mirostat Sampling微稳采样
--mirostat N
: 启用 Mirostat 采样,控制文本生成过程中的困惑(默认值:0、0 = 禁用、1 = Mirostat、2 = Mirostat 2.0)。
--mirostat-lr N
: 设置Mirostat学习率,参数eta(默认:0.1)。
--mirostat-ent N
: 设置 Mirostat 目标熵,参数 tau(默认值:5.0)。
Mirostat 是一种在文本生成过程中主动将生成文本的质量保持在所需范围内的算法。它的目的是在连贯性和多样性之间取得平衡,避免由于过度重复(无聊陷阱)或不连贯(混乱陷阱)而导致低质量的输出。
该"--mirostat-lr"选项设置 Mirostat 学习率 (eta)。学习率影响算法对生成文本反馈的响应速度。较低的学习率将导致调整速度较慢,而较高的学习率将使算法更具响应性。默认值为"0.1"。
该"--mirostat-ent"选项设置 Mirostat 目标熵 (tau),它表示生成文本所需的困惑度值。调整目标熵可以让您控制生成文本的连贯性和多样性之间的平衡。较低的值将导致文本更加集中和连贯,而较高的值将导致文本更加多样化且可能不太连贯。默认值为"5.0"。
Example usage: --mirostat 2 --mirostat-lr 0.05 --mirostat-ent 3.0
Logit Bias逻辑偏差
-l TOKEN_ID(+/-)BIAS, --logit-bias TOKEN_ID(+/-)BIAS
: 修改生成的文本补全中出现标记的可能性。
logit 偏差选项允许您手动调整特定标记出现在生成文本中的可能性。通过提供令牌 ID 以及正偏差值或负偏差值,您可以增加或减少生成该令牌的概率。
例如,用于"--logit-bias 15043+1"增加标记“Hello”的可能性,或"--logit-bias 15043-1"减少其可能性。使用负无穷大的值可确保"--logit-bias 15043-inf"永远不会生成"Hello"令牌。
"\code{begin}"更实际的用例可能是"\code{end}"通过将"\"标记 (29905) 设置为负无穷大来"-l 29905-inf"防止生成和。 (这是由于 LLaMA 模型推理中出现的 LaTeX 代码普遍存在。)
Example usage: --logit-bias 29905-inf
RNG SeedRNG种子
-s SEED, --seed SEED
:设置随机数生成器 (RNG) 种子(默认值:-1,-1 = 随机种子)。
RNG 种子用于初始化影响文本生成过程的随机数生成器。通过设置特定的种子值,您可以使用相同的输入和设置在多次运行中获得一致且可重复的结果。这有助于测试、调试或比较不同选项对生成文本的影响,以了解它们何时出现分歧。如果种子设置为小于 0 的值,则将使用随机种子,这将导致每次运行产生不同的输出。
Performance Tuning and Memory Options性能调整和内存选项
这些选项有助于提高 LLaMA 模型的性能和内存使用率。通过调整这些设置,您可以微调模型的行为,以更好地适应您的系统功能,并为您的特定用例实现最佳性能。
Number of Threads线程数
-t N, --threads N
: 设置生成时使用的线程数。为了获得最佳性能,建议将此值设置为系统具有的物理 CPU 核心数(而不是逻辑核心数)。使用正确数量的线程可以极大地提高性能。
-tb N, --threads-batch N
: 设置批处理和提示处理期间使用的线程数。在某些系统中,在批处理期间使用比生成期间更多的线程是有益的。如果未指定,则用于批处理的线程数将与用于生成的线程数相同。
Mlock姆洛克
--mlock
: 将模型锁定在内存中,防止在内存映射时被换出。这可以提高性能,但会需要更多 RAM 来运行,并且在模型加载到 RAM 时可能会减慢加载时间,从而牺牲了内存映射的一些优势。
No Memory Mapping无内存映射
--no-mmap
: 不要对模型进行内存映射。默认情况下,模型被映射到内存中,这允许系统根据需要仅加载模型的必要部分。但是,如果模型大于 RAM 总量,或者系统可用内存不足,则使用 mmap 可能会增加页面调出的风险,从而对性能产生负面影响。禁用 mmap 会导致加载时间变慢,但如果您不使用--mlock
. 请注意,如果模型大于 RAM 总量,关闭 mmap 将根本无法加载模型。
NUMA supportNUMA 支持
--numa
: 尝试进行优化,以帮助某些具有非统一内存访问的系统。目前,这包括将相等比例的线程固定到每个 NUMA 节点上的核心,并禁用 mmap 的预取和预读。后者会导致映射页面在第一次访问时出现故障,而不是一次性全部出现故障,并且结合将线程固定到 NUMA 节点,更多页面最终出现在使用它们的 NUMA 节点上。请注意,如果模型已经在系统页面缓存中,例如由于先前运行时没有此选项,则除非您先删除页面缓存,否则这不会产生什么影响。这可以通过重新启动系统或在 Linux 上以 root 身份将“3”写入“/proc/sys/vm/drop_caches”来完成。
Memory Float 32内存浮点32
--memory-f32
: 使用 32 位浮点数代替 16 位浮点数作为内存 key+value。这使上下文内存要求和缓存的提示文件大小增加了一倍,但似乎并没有以可测量的方式提高生成质量。不建议。
Batch Size批量大小
-b N, --batch-size N
: 设置提示处理的批量大小(默认:512)。这种大批量大小有利于在构建期间安装并启用 BLAS 的用户。如果您没有启用 BLAS(“BLAS=0”),则可以使用较小的数字(例如 8)来查看在某些情况下评估时的提示进度。
Prompt Caching提示缓存
--prompt-cache FNAME
: 指定一个文件来缓存初始提示后的模型状态。当您使用较长的提示时,这可以显着加快启动时间。该文件在第一次运行期间创建,并在后续运行中重用和更新。注意: 恢复缓存的提示并不意味着恢复会话保存时的确切状态。因此,即使指定特定种子,也不能保证您获得与原始生成相同的令牌序列。
Grammars语法
--grammar GRAMMAR
, ,--grammar-file FILE
:指定语法(内联或在文件中定义)以将模型输出限制为特定格式。例如,您可以强制模型输出 JSON 或仅使用表情符号说话。请参阅GBNF guideGBNF 指南 有关语法的详细信息,
Quantization量化
README.
有关 4 位量化的信息,可以显着提高性能并减少内存使用,请参阅 llama.cpp 的主要README 。
Additional Options其他选项
这些选项在运行 LLaMA 模型时提供额外的功能和自定义:
-h, --help
: 显示帮助消息,其中显示所有可用选项及其默认值。这对于检查最新选项和默认值特别有用,因为它们可能会经常更改,并且本文档中的信息可能会过时。
--verbose-prompt
:在生成文本之前打印提示。
-ngl N, --n-gpu-layers N
: 当使用适当的支持(当前是 CLBlast 或 cuBLAS)进行编译时,此选项允许将某些层卸载到 GPU 进行计算。通常会提高性能。
-mg i, --main-gpu i
: 当使用多个 GPU 时,此选项控制将哪个 GPU 用于小张量,对于小张量,在所有 GPU 上分割计算的开销是不值得的。相关 GPU 将使用稍多的 VRAM 来存储临时结果的暂存缓冲区。默认情况下使用 GPU 0。需要 cuBLAS。
-ts SPLIT, --tensor-split SPLIT
: 当使用多个 GPU 时,此选项控制应在所有 GPU 上分割的张量大小。是一个以逗号分隔的非负值列表,指定每个 GPU 应按顺序获取的数据比例。例如,“3,2”会将 60% 的数据分配给 GPU 0,将 40% 的数据分配给 GPU 1。默认情况下,数据按 VRAM 的比例进行分割,但这可能不是最佳性能。需要 cuBLAS。
--lora FNAME
:将 LoRA(低阶适应)适配器应用于模型(意味着 --no-mmap)。这使您可以使预训练模型适应特定任务或领域。
--lora-base FNAME
: 可选模型,用作 LoRA 适配器修改的层的基础。该标志与 标志结合使用--lora
flag, 并指定适应的基本模型。