为什么当我设置格式为"json"时,Ollama如此之慢?

kognpnkq  于 6个月前  发布在  其他
关注(0)|答案(6)|浏览(69)

问题是什么?

这是一个重复的问题,#3154已经被错误地关闭了。当包含额外的上下文时,format="json"参数的性能比常规推理慢10倍。
一个类似这样的提示在启用CUDA和format="json"的NVIDIA T4上需要约24秒才能返回。而没有格式化json的相同确切提示只需要约2秒就能返回。这肯定是一个bug,对吧?

Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.

${context}

Please respond in the following JSON schema
{
   "${schema.fieldName}": {
      "type": ${schema.type},
      "description": ${schema.description}
     }
}

Question: ${schema.description}
Helpful Answer:

操作系统

Linux

GPU

Nvidia

CPU

Intel

Ollama版本

0.1.32

7nbnzgx9

7nbnzgx91#

我认为这与服务器中的循环检测代码有关。在server.go代码中,检测代码允许模型在空白处循环一定数量的令牌。如果最后一个令牌重复了一定次数或者只检测到30次空白,它就会中止预测。如果你能在调试模式下运行请求并设置ollama,这将会很有用。关于这个问题的更多信息,请参考:故障排除

如果这与循环检测逻辑有关,你将在日志中看到类似“预测中止,达到令牌重复限制”的一行。另一方面,一些与停止检测相关的其他bug与llama.cpp有关,也可能是一个原因。

我建议尝试启用流式传输来运行你的请求,这将显示模型返回的内容。

curl http://127.0.0.1:11434/api/generate -d '{ 
"model": "llama3:8b", 
"prompt": "You are a helpful writer, respond with an address in the US in JSON format.", 
"stream": true, "format": "json" }'

作为解决方法,我建议暂时不要使用format=json,而是在提示中直接提及它。根据你的集成方式,你可能会通过使用正则表达式或so来捕获响应中的JSON部分来获得更好的效果。我在不同模型中使用format=json时遇到了一些缺陷和不一致的行为,正则表达式可能是一个更稳健的解决方案。

mrzz3bfm

mrzz3bfm2#

我会说...我观察到有些模型在json模式下比其他模型运行速度慢。我不确定这是否是实现中的一个bug,还是模型本身只是以有趣的方式进行训练。
观察流式响应,它似乎React迅速,但随后会在决定消息完成之前等待一段时间。一个明确定义的语法会意识到JSON消息已经结束,并立即终止,而不是等待某种流结束标记,这可能是这里的问题。

8e2ybdfx

8e2ybdfx3#

llama3:8b上遇到了这个问题,但在mistral:latest上却没有,很奇怪吧?在我3080上,两个模型之间的常规文本速度完全相同。我认为@coder543是正确的,只是这个实现中的一个bug。为什么我们在json中首先输出了空白字符?

j2cgzkjk

j2cgzkjk4#

2024-04-25.08-44-01.mp4
2024-04-25.08-44-46.mp4
第一个视频展示了没有 "format": "json" 的情况下我的函数调用,第二个展示了有 "format": "json" 的情况下的函数调用。你可以看到速度差异是惊人的;同样的提示和一切。

svdrlsy4

svdrlsy45#

很遗憾,您的视频没有视觉展示在两种模式下生成JSON。如果模型在没有JSON模式的情况下不能至少在某些时候以正确的JSON响应,那么这使得很难确切地知道像这样的软件中问题出在哪里。
如果响应是流式的(有清晰的视觉指示何时流式响应结束),我们就可以看看它在生成JSON后是否会暂停,或者它只是逐个字符非常缓慢地生成JSON。
我绝对希望这种慢速JSON的情况能够得到解决。

mv1qrgav

mv1qrgav6#

关于语法限制(JSON格式使用)的一些已知上游问题:ggerganov/llama.cpp#4218

相关问题