当我使用ollama serve
并提供一个大约30k个tokens的上下文,与具有最大上下文窗口为32768的mistral模型一起时,服务器没有显示任何错误,并像往常一样继续返回。这让我觉得它成功地接收到了整个上下文。
但是深入挖掘后,我发现并非如此。
所以当我这样做时,它开始正常工作
ollama run <model>
/set parameter num_ctx 32768
/save
也许这是因为在使用ollama serve
时有标志需要设置,而我在阅读文档后不知道这些标志。是否有更好的方法来为ollama serve
设置上下文窗口?
在我看来,预期的行为是在输入超过设置的上下文窗口长度时显示错误消息。LM Studio就是这样做的
请告诉我是否是因为我没有使用正确的标志,或者这是一个合理的关注点。
6条答案
按热度按时间xytpbqjk1#
这个变量和其他许多变量都是针对每个模型的设置,而不是针对每个服务器的。它们必须是针对每个模型的,因为每个模型都需要不同的设置。当服务器启动时,它甚至不知道你将运行哪个模型,而且你可能接下来会连续运行10个不同的模型。
通过一次性地使用/save(或者你可以通过Modelfile方法添加,参见文档),然后永久地为你应用它。
听起来你可能把“serve”和“run”混为一谈。当你开始在多个模型之间切换时,我相信你会更倾向于这些不是一次性针对所有模型的“全局”变量。这会导致在从Mistral切换到新的Gemma等情况下出现各种错误。
或者也许我误解了你的(误)用例:)
eoxn13cs2#
@vividfog 我明白serve和run是不同的事情,serve当然不知道用户会调用哪个模型。然而,我最初的观点是它在没有显示输入过长的情况下默默失败。
对于serve的UX,我相信有比运行每个模型并有
/set parameter ...
和/save
更好的、更清晰的选择。这相当繁琐且容易出错。如果服务器有一个配置,可以一次性为所有模型设置,那将是一个我认为的UX改进。至少,文档应该明确说明
ollama serve
对于用例或(误)用例的期望是什么。j8yoct9x3#
@logancyang 我明白了。抱歉那个双关语,想到就忍不住了。
当输入超过某个阈值时默默失败,我同意这并不是最优的。等我有时间的时候,我也要测试一下。如果我现在尝试的话,32k的上下文会超过我的整个笔记本电脑。
与此同时,我为Mistral做了
/set parameter num_ctx 5
,然后写了5个以上的标记。在这种情况下,它并没有默默失败,而是产生了无意义的东西。对于Qwen也是如此。我想知道为什么。在这里,如果应用程序能够捕获到这个问题,那将会很好。ycggw6v24#
@vividfog ,这很有趣。我认为在5个令牌的上下文长度中,任何事情都是可能的,因为它没有太多可以利用的东西?无论如何,我认为最好有一个明确的错误信息。当我测试我的长提示时,我知道有些东西不对劲,但不知道是什么。文档中没有任何关于
ollama serve
和上下文长度配置的信息。但是你从另一个问题中的评论帮助我找到了问题所在,所以谢谢你!14ifxucb5#
我认为这也是我出现崩溃的原因。在服务模式下打开Web UI和Ollama,它们似乎不会相互通信来设置上下文窗口?比如说,即使我在Open Web UI设置中将上下文设置为8K,它也不会告诉Ollama服务器去设置一个例如8K上下文的混合模式...?
v7pvogib6#
我认为这也是我出现崩溃的原因。在Open Web UI和Ollama的serve模式下,它们似乎没有相互通信来设置上下文窗口?比如即使我在Open Web UI设置中将上下文设置为8K,它也不会告诉Ollama serve去设置一个例如8K上下文的混合...?
你的UI很可能没有以Ollama接受的方式发送上下文长度参数。只需检查服务器日志,看看是否显示了正确的上下文长度值。
Ollama的问题在于,它应该让我们知道输入是否溢出或截断,而不是默默地继续进行。