ollama 上下文窗口大小无法更改

t8e9dugd  于 2个月前  发布在  其他
关注(0)|答案(3)|浏览(31)

问题是什么?

我看到这个问题已经被部分报告,但之前的报告似乎都没有对他们可能的方法进行广泛的测试。
问题:
Ollama服务器会截断输入,将其限制在2048个令牌内,而不管使用的聊天完成API是什么。
我的设置:
我在本地计算机上尝试了Ollama,使用的是Windows操作系统和CPU
也在Linux机器上尝试了Ollama,同样是CPU
我尝试了几种模型:llama3、gemma2、mistral
我尝试了几种API:Ollama的、Langchain、OpenAI
在我两台机器上,Ollama服务器默认以8192个上下文窗口大小启动。
level=INFO source=server.go:617 msg="waiting for server to become available" status="llm server loading model" llama_new_context_with_model: n_ctx = 8192
但是为了以防万一,我也尝试了:
/set parameter num_ctx 8192
顺便说一下,在Linux机器上,这会导致窗口大小设置为4*8192,所以我不得不重新启动服务器。
我用来获取聊天完成的代码如下:
completion = self.llm_client.chat(model=self.model, messages=[
{"role": "system", "content": self.context},
{"role": "user", "content": question}
],
options=dict(temperature=temperature, n_ctx=n_ctx)
)
这与我使用的API(ollama、langchain或openAI)或运行的机器(Windows或Linux)无关。
服务器日志显示:
INFO [update_slots] input truncated | n_ctx=2048 n_erase=3157 n_keep=4 n_left=2044 n_shift=1022 tid="139731362228096" timestamp=1723208612
我唯一能让Ollama使用给定大小的上下文窗口的方法是不使用API,而是通过requests库直接进行调用。但这比使用langchain API慢得多(后者似乎是3种中最快的)。
url = base_url + "/api/chat"
model = self.model

`payload = {
                "model": model,
                "messages": [
                    {"role": "system", "content": self.context},
                    {"role": "user", "content": question}
                ],
                "stream": False,
                "options": {
                    "num_ctx": n_ctx,
                    "temperature": self.temperature,
                    "max_tokens": self.max_tokens
                }
            }
            headers = {
                "Content-Type": "application/json"
            }
            response = requests.post(url, data=json.dumps(payload), headers=headers)
            response.raise_for_status()`
sqxo8psd

sqxo8psd1#

OpenAI兼容端点不支持设置上下文大小,因为这不是官方OpenAI API标准的一部分。如果您想使用具有不同大小的上下文窗口的OpenAI端点,您需要创建一个具有所需大小的默认上下文窗口的新模型:#5965(评论)。
上下文窗口最终变为4*8192,因为要么您有OLLAMA_NUM_PARALLEL=4,要么它未设置,而Ollama看到您拥有充足的资源并使用了默认值4而不是1。您可以通过在服务器环境中设置OLLAMA_NUM_PARALLEL=1来覆盖此默认值。

klsxnrf1

klsxnrf12#

在您的聊天完成示例中,应为 num_ctx

kiayqfof

kiayqfof3#

上下文窗口最终变成了4*8192,因为你要么有OLLAMA_NUM_PARALLEL=4,要么它未设置。Ollama看到你有足够的资源,并使用了默认值4而不是1。你可以通过在服务器环境中设置OLLAMA_NUM_PARALLEL=1来覆盖这个默认值。
我曾经很好奇为什么会发生这种情况......现在想明白了,非常感谢指出这个问题!

相关问题