一、现象
deepseek火了之后,本地私有化部署大模型的门槛大大降低,即使是在家里的windows电脑,也非常简单就可以安装大模型并且使用,最近在公司服务器上通过ollama部署了一个deepseek-r1:1.5b大模型后,通过ollama run deepseek-r1:1.5b命令启动了,在其终端命令窗口对话,回复很快,一般就几秒钟就可以流式的返回,但是项目中是通过API访问本地大模型的,对接好API后发现,请求一次响应速度非常慢,3~5分钟才回复。
二、原因分析
通过升级服务器配置到32c64G,调用大模型后查看内存和CPU发现,内存用了大概10G,CPU飚到1600%,但也可以返回。
说明在控制终端请求是没问题的,那么模型是可以跑的,那API为什么这么慢呢?
我在服务器通过curl 命令,构建好请求参数,直接在服务器上执行,发现也只需要几秒钟就陆续的返回和打印了流的结果,那么说明API接口服务也是没有问题的,正常的。
那么问题出现在哪?
我怀疑是不是流式与非流式返回的区别,因为在终端命令和服务器curl执行请求,都是默认的流式的返回结构,速度正常,而我项目中的http请求默认的是非流式的返回结果的。
于是,我把代码中改成流式的返回:stream:true 传参过去,果然,速度很快就返回了流。
那么,问题原因就找到了,就是因为流式返回快,非流式需要等所有结果都生成了一次性返回,所以很慢。
其实,有个问题还是很奇怪,即使非流式慢,那么,理论上,非流式返回的时间应该大概等于流式返回情况下,所有流返回的总耗时吧,但是,实际却是,非流式返回的时间远远大于流式返回耗时之和,不知道大模型处理了什么,反正是个黑盒子,也没办法找到原因,欢迎知道原因的大佬留言,有偿感谢~