Llama.cpp提供的 main工具允许你以简单有效的方式使用各种 LLaMA 语言模型。 它专门设计用于与 llama.cpp 项目配合使用。
推荐:用 NSDT编辑器 快速搭建可编程3D场景
Llama.cpp的工具 main提供简单的 C/C++ 实现,具有可选的 4 位量化支持,可实现更快、更低的内存推理,并针对桌面 CPU 进行了优化。 该程序可用于使用 LLaMA 模型执行各种推理任务,包括根据用户提供的提示生成文本以及使用反向提示进行类似聊天的交互。
要立即开始,请运行以下命令,确保使用你拥有的模型的正确路径:
基于 Unix 的系统(Linux、macOS 等):
./main -m models/7B/ggml-model.bin --prompt "Once upon a time"
Windows:
main.exe -m models\7B\ggml-model.bin --prompt "Once upon a time"
要获得交互式体验,请尝试以下命令:
基于Unix的系统(Linux、MacOS等):
./main -m models/7B/ggml-model.bin -n -1 --color -r "User:" --in-prefix " " -i -p \
'User: Hi
AI: Hello. I am an AI chatbot. Would you like to talk?
User: Sure!
AI: What would you like to talk about?
User:'
Windows:
main.exe -m models\7B\ggml-model.bin -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:"
以下命令从启动提示生成“无限”文本(可以使用 Ctrl-C 来停止它):
基于Unix的系统(Linux、MacOS等):
./main -m models/7B/ggml-model.bin --ignore-eos -n -1 --random-prompt
Windows:
main.exe -m models\7B\ggml-model.bin --ignore-eos -n -1 --random-prompt
在本节中,我们将介绍使用 LLaMA 模型运行主程序的最常用选项:
Llama.cpp的main程序提供了多种使用输入提示与 LLaMA 模型交互的方法:
Llama.cpp的 main程序提供了与 LLaMA 模型交互的无缝方式,允许用户参与实时对话或提供特定任务的说明。 可以使用各种选项触发交互模式,包括 --interactive、 --interactive-first 和 --instruct。
在交互模式下,用户可以通过在过程中注入输入来参与文本生成。 用户可以随时按 Ctrl+C 插入并键入输入,然后按 Return 将其提交到 LLaMA 模型。 要提交其他行而不最终确定输入,用户可以使用反斜杠 ( ) 结束当前行并继续输入。
反向提示是一种通过在遇到特定文本字符串时暂停文本生成来使用 LLaMA 模型创建类似聊天体验的强大方法:
–in-prefix 标志用于向输入添加前缀,主要用于在反向提示后插入空格。 以下是如何将 --in-prefix 标志与 --reverse-prompt 标志结合使用的示例:
./main -r "User:" --in-prefix " "
./main -r "User:" --in-prefix " " --in-suffix "Assistant:"
指令模式在使用 Alpaca 模型时特别有用,这些模型旨在遵循用户指令来执行特定任务:
技术细节:用户的输入在内部以反向提示符为前缀(或 默认 ### instruction:),后跟 ### Response:(除非你在没有任何输入的情况下按 Return 键,以继续生成更长的响应 )。
通过理解和利用这些交互选项,可以使用 LLaMA 模型创建引人入胜的动态体验,根据你的特定需求定制文本生成过程。
在文本生成过程中,LLaMA 模型的上下文大小有限,这意味着它们只能考虑输入和生成文本中的一定数量的标记。 当上下文填满时,模型会在内部重置,可能会丢失对话或指令开始时的一些信息。 上下文管理选项有助于在这些情况下保持连续性和连贯性。
–ctx-size 选项允许你设置 LLaMA 模型在文本生成过程中使用的提示上下文的大小。 较大的上下文大小有助于模型更好地理解和生成较长输入或对话的响应。
-c N, --ctx-size N:设置提示上下文的大小(默认值:512)。 LLaMA 模型是在 2048 上下文构建的,这将在较长的输入/推理上产生最佳结果。 然而,将上下文大小增加到超过 2048 可能会导致不可预测的结果。
一些微调模型通过缩放 RoPE 来延长上下文长度。 例如,如果原始预训练模型的上下文长度(最大序列长度)为 4096 (4k),而微调模型的上下文长度为 32k。 这是一个 8 的缩放因子,应该通过将上面的 --ctx-size 设置为 32768 (32k) 并将 --rope-scale 设置为 8 来工作。
–keep 选项允许用户在模型运行脱离上下文时保留原始提示,确保保持与初始指令或对话主题的连接。
以下选项允许你控制文本生成过程,并根据你的需要微调生成文本的多样性、创造力和质量。 通过调整这些选项并尝试不同的值组合,你可以找到适合你的特定用例的最佳设置。
–n-predict 选项控制模型响应输入提示生成的标记数量。 通过调整此值,你可以影响生成文本的长度。 较高的值将生成较长的文本,而较低的值将生成较短的文本。
即使我们有有限的上下文窗口, -1 的值也将启用无限文本生成。 当上下文窗口已满时,一些较早的令牌( --n-keep之后的令牌的一半)将被丢弃。 然后必须重新评估上下文,然后才能恢复生成。 在大型模型和/或大型上下文窗口上,这将导致输出显著暂停。
如果不希望出现暂停,则值 -2 将在上下文填满时立即停止生成。
需要注意的是,如果遇到序列结束 ( EOS) 标记或反向提示,生成的文本可能会短于指定的令牌数量。 在交互模式下,文本生成将暂停,控制权将返回给用户。 在非交互模式下,程序将结束。 在这两种情况下,文本生成可能会在达到指定的 n 预测值之前停止。 如果你希望模型继续运行而不自行产生序列结束,则可以使用 --ignore-eos 参数。
温度是一个超参数,控制生成文本的随机性。 它影响模型输出标记的概率分布。 较高的温度(例如 1.5)使输出更加随机和创造性,而较低的温度(例如 0.5)使输出更加集中、确定性和保守。 默认值为 0.8,它提供了随机性和确定性之间的平衡。 在极端情况下,温度为 0 时将始终选择最有可能的下一个标记,从而在每次运行中产生相同的输出。
用法示例: --temp 0.5
重复惩罚选项有助于防止模型生成重复或单调的文本。 较高的值(例如,1.5)将对重复进行更严厉的惩罚,而较低的值(例如,0.9)将更宽松。 默认值为 1.1。
Repeat-last-n 选项控制历史记录中要考虑惩罚重复的标记数量。 较大的值将在生成的文本中进一步查找以防止重复,而较小的值将仅考虑最近的标记。 值为 0 会禁用惩罚,值为 -1 会将标记数量设置为等于上下文大小 (ctx-size)。
使用 --no-penalize-nl 选项在应用重复惩罚时禁用换行惩罚。 此选项对于生成聊天对话、对话、代码、诗歌或换行符在结构和格式中发挥重要作用的任何文本特别有用。 禁用换行惩罚有助于在这些特定用例中保持自然流程和预期格式。
用法示例: --repeat-penalty 1.15 --repeat-last-n 128 --no-penalize-nl
Top-k 采样是一种文本生成方法,仅从模型预测的前 k 个最有可能的标记中选择下一个标记。 它有助于降低生成低概率或无意义令牌的风险,但也可能限制输出的多样性。 top-k 的较高值(例如 100)将考虑更多标记并导致更多样化的文本,而较低值(例如 10)将关注最可能的标记并生成更保守的文本。 默认值为 40。
用法示例: --top-k 30
Top-p 采样,也称为核心采样,是另一种文本生成方法,它从累积概率至少为 p 的标记子集中选择下一个标记。 该方法通过考虑令牌的概率和采样的令牌数量来提供多样性和质量之间的平衡。 top-p 的较高值(例如 0.95)将导致文本更加多样化,而较低的值(例如 0.5)将生成更加集中和保守的文本。 默认值为 0.9。
用法示例: --top-p 0.95
无尾采样 (TFS) 是一种文本生成技术,旨在减少不太可能的标记对输出的影响,这些标记可能不太相关、不太连贯或无意义。 与 Top-P 类似,它尝试动态确定大部分最可能的标记。 但 TFS 根据概率的二阶导数过滤掉 logits。 当二阶导数之和达到参数 z 后,停止添加标记。 简而言之:TFS 查看令牌的概率下降的速度,并使用参数 z 切断不太可能的令牌的尾部。 z 的典型值在 0.9 至 0.95 范围内。 值 1.0 将包括所有令牌,从而禁用 TFS 的效果。
使用示例: --tfs 0.95
局部典型采样通过对基于周围上下文的典型或预期的标记进行采样,促进上下文连贯且多样化的文本的生成。 通过将参数 p 设置在 0 和 1 之间,你可以控制生成局部连贯和多样化的文本之间的平衡。 接近 1 的值将促进上下文更加一致的标记,而接近 0 的值将促进更加多样化的标记。 等于 1 的值将禁用本地典型采样。
使用示例: --typical 0.9
Mirostat 是一种在文本生成过程中主动将生成文本的质量保持在所需范围内的算法。 它的目的是在连贯性和多样性之间取得平衡,避免由于过度重复(无聊陷阱)或不连贯(混乱陷阱)而导致低质量的输出。
–mirostat-lr 选项设置 Mirostat 学习率 (eta)。 学习率影响算法对生成文本反馈的响应速度。 较低的学习率将导致调整速度较慢,而较高的学习率将使算法更具响应性。 默认值为 0.1。
–mirostat-ent 选项设置 Mirostat 目标熵 (tau),它表示生成的文本所需的困惑度值。 调整目标熵可以让你控制生成文本的连贯性和多样性之间的平衡。 较低的值将导致文本更加集中和连贯,而较高的值将导致文本更加多样化且可能不太连贯。 默认值为 5.0。
用法示例: --mirostat 2 --mirostat-lr 0.05 --mirostat-ent 3.0
logit 偏差选项允许你手动调整特定标记出现在生成文本中的可能性。 通过提供令牌 ID 以及正偏差值或负偏差值,可以增加或减少生成该令牌的概率。
例如,使用 --logit-bias 15043+1 增加标记“Hello”的可能性,或使用 --logit-bias 15043-1 降低其可能性。 使用负无穷大的值, --logit-bias 15043-inf 确保永远不会生成令牌 Hello。
更实际的用例可能是通过使用 -l 29905-inf 将 \ 令牌 (29905) 设置为负无穷大来防止生成 \code{begin} 和 \code{end}。 这是由于 LLaMA 模型推理中出现的 LaTeX 代码普遍存在。
用法示例: --logit-bias 29905-inf
RNG 种子用于初始化影响文本生成过程的随机数生成器。 通过设置特定的种子值,你可以使用相同的输入和设置在多次运行中获得一致且可重复的结果。 这有助于测试、调试或比较不同选项对生成文本的影响,以了解它们何时出现分歧。 如果种子设置为小于 0 的值,则将使用随机种子,这将导致每次运行产生不同的输出。
这些选项有助于提高 LLaMA 模型的性能和内存使用率。 通过调整这些设置,你可以微调模型的行为,以更好地适应你的系统功能,并为特定用例实现最佳性能。
有关 4 位量化的信息,可以显着提高性能并减少内存使用,请参阅 llama.cpp 的主README。
这些选项在运行 LLaMA 模型时提供额外的功能和自定义:
原文链接:Llama.cpp工具main手册 — BimAnt