属于一个比较场景的问题,因为ollama num_ctx 默认是2048 对于比较大的上下文窗口数据会出现被截断的问题

解决方法

目前基本分类两种方法,一种是临时以及持久的,机制上还有一些差异,因为ollama 内部实际也是拉起的llama.cpp 服务
对于调用chat api 可以直接通过api 调用参数传递,对于兼容openai 模式的暂时就不行了(官方说是不兼容,实际上目前openai 的api 可以进行一些额外参数的传递,只要兼容也可以解决)

  • 接口参数传递

chat 模式的, 如下包含了支持的参数

curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt": "Why is the sky blue?",
  "stream": false,
  "options": {
    "num_keep": 5,
    "seed": 42,
    "num_predict": 100,
    "top_k": 20,
    "top_p": 0.9,
    "min_p": 0.0,
    "tfs_z": 0.5,
    "typical_p": 0.7,
    "repeat_last_n": 33,
    "temperature": 0.8,
    "repeat_penalty": 1.2,
    "presence_penalty": 1.5,
    "frequency_penalty": 1.0,
    "mirostat": 1,
    "mirostat_tau": 0.8,
    "mirostat_eta": 0.6,
    "penalize_newline": true,
    "stop": ["\n", "user:"],
    "numa": false,
    "num_ctx": 1024,
    "num_batch": 2,
    "num_gpu": 1,
    "main_gpu": 0,
    "low_vram": false,
    "f16_kv": true,
    "vocab_only": false,
    "use_mmap": true,
    "use_mlock": false,
    "num_thread": 8
  }
}'
"model": "llama3",
  • 修改Modelfile 直接修改默认的num_ctx 如下
FROM qwen2:7b
PARAMETER num_ctx 32768

之后就是创建新的模型

说明

以上是基于ollama 的num_ctx 修改,实际上也说了内部是基于lama.cpp的,我在测试的时候开始的时候发现修改是成功了,但是没有使用gpu,之后进行cuda 升级,以及机器重启,之后发现又可以使用gpu 了,同时调整还会占用比较的资源,实际还是需要多测试,大模型推理没有gpu 速度的确比较差

参考资料

https://github.com/ollama/ollama/blob/main/docs/modelfile.md#parameter