Ollama进阶参数学习

前言

最近在学习的过程中,大模型高级参数配置,以及如何优化大模型显存占用量,对于相关配置需要进一步深入了解,并修改配置。

增加上下文长度

在 ollama 默认的上下文窗口中默认上下文窗口大小为 2048,即为 2 k token 但用于在知识库相关场景下 2 k token 所包含的引用是很少的。所以我们需要增大引用量。
查看 Haggingface 官网上对于大模型信息说明,一般都会说明:Context Length: Full 131,072 tokens 这代表的是最大支持 128 k token,这个信息在 ollama 中也可以查看出来,使用命令 ollama show [模型] 展示出来的信息也可以了解到这一点。
增加上下文长度可以通过两种方式

  1. 临时增加长度,在用 API 接口向大模型发送文本时可以临时设置上下文长度。但是该方式有个缺陷需要每次反复重新载入模型,较为浪费时间,而且需要第三方应用支持 ollama 这套设置方案。
  2. 直接重新建立一个模型,通过修改 modelfile 文件。
    这里根据实际的应用的需求我直接选择第二种方式。

Modelfile 参数说明

参数 描述 值类型 示例用法
mirostat 启用 Mirostat 采样以控制困惑度。(默认值:0、0 = 禁用、1 = Mirostat、2 = Mirostat 2.0) int mirostat 0
mirostat_eta 影响算法响应生成文本的反馈的速度。较低的学习率将导致较慢的调整,而较高的学习率将使算法的响应速度更快。(默认值:0.1) float mirostat_eta 0.1
mirostat_tau 控制输出的连贯性和多样性之间的平衡。较低的值将导致文本更集中、更连贯。(默认值:5.0) float mirostat_tau 5.0
num_ctx 设置用于生成下一个标记的上下文窗口的大小。(默认值:2048) int num_ctx 4096
repeat_last_n 设置模型回溯多长时间以防止重复。(默认值:64,0 = 禁用,-1 = num_ctx) int repeat_last_n 64
repeat_penalty 设置对重复项的惩罚强度。较高的值(例如 1.5)将更强烈地惩罚重复,而较低的值(例如 0.9)将更宽松。(默认值:1.1) float repeat_penalty 1.1
temperature 模型的温度。提高温度会使模型更有创意地回答。(默认值:0.8) float temperature 0.7
seed 设置用于生成的随机数种子。将此设置为特定数字将使模型为同一提示生成相同的文本。(默认值:0) int seed 42
stop 设置要使用的停止序列。当遇到此模式时,LLM 将停止生成文本并返回。通过在模型文件中指定多个单独的 停止 参数,可以设置多个停止模式。 string stop "AI assistant: "
num_predict 生成文本时要预测的最大令牌数。(默认值:-1,无限生成) int num_predict 42
top_k 降低产生无意义的可能性。较高的值(例如 100)将给出更多样化的答案,而较低的值(例如 10)将更保守。(默认值:40) int top_k 40
top_p 与 top-k 一起使用。较高的值(例如 0.95)将导致文本更加多样化,而较低的值(例如 0.5)将生成更集中和保守的文本。(默认值:0.9) float top_p 0.9
min_p 替代 top_p,旨在确保质量和多样性的平衡。参数 p 表示相对于最可能标记的概率,考虑标记的最小概率。例如,当 p=0.05 且最可能的标记的概率为 0.9 时,将筛选掉值小于 0.045 的 logit。(默认值:0.0) float min_p 0.05

创建一个新模型

  1. 导出该模型的默认的 modelfile:
ollama show --modelfile qwq:latest > Modelfile 
  1. 在创建出来的 Modelfile 文件中找到 PARAMETER 或者在文件底部直接添加:
PARAMETER num_ctx 32768 

若在模型官网有说明部分采样参数也可以直接设置在这里:

PARAMETER top_k 30
PARAMETER top_p 0.95
PARAMETER temperature 0.6

[!NOTE] Title
注意在设置完成上下文窗口后显存会增加,若想了解显存具体增加了多少可以使用下面这个工具来大致推算一下。DeepSeek 模型兼容性检测

  1. 创建新模型
ollama create qwq:32b-32k -f Modelfile 
  1. 后面正常调用 qwq:32b-32k 该模型就可以运行具有更高上下文的模型了

优化显存占用

在增加完上下文长度后,显存占用明显多了一个量级,但是增加部分属于模型生成输出的张量部分,实际上可以减小部分参数缩小此部分的大小的。
此部分参数参考上一篇 [[Ollama初识]] : OLLAMA_KV_CACHE_TYPE,K/V 缓存的量化类型,这是 Ollama 最新更新的功能,能够减少上下文缓存占用的显存控件,目前提供三个参数:

  • f16 - 高精度和内存使用率(默认)。
  • q8_0 - 8 位量化,使用大约 f16 的 1/2 内存,精度损失非常小,这通常对模型的质量没有明显影响(如果不使用 f 16,建议使用)。
  • q4_0 - 4 位量化,使用的内存大约是 F16 的 1/4,精度损失为中小,在较高的上下文大小下可能更明显。
    但是注意,在部分模型中,光配置这一个是没有变化的必须将 OLLAMA_FLASH_ATTENTION 也同时启用,所以增加的配置如下:
OLLAMA_FLASH_ATTENTION=1
OLLAMA_KV_CACHE_TYPE=q8_0

配置更新完成后重新启动 ollama 既可。

posted @ 2025-04-13 10:15  一月一星辰  阅读(1783)  评论(0)    收藏  举报