肇鑫的日常博客

日常

Ollama运行本地大模型的一些技巧

使用Ollama也有一些时间。从小白阶段,只懂按照命令行运行。到现在会自己从抱抱脸选择官方没有的模型自己进行导入。甚至创建局域网内部的服务器,使用应用调用Ollama的API。是时候总结一下Ollama本地运行大模型的一些技巧了。

运行方式

终端运行

新手一般会使用

ollama serve

启动Ollama,并使用ctrl+c结束运行。

以服务方式运行

我们还可以使用服务的方式运行Ollama。这样Ollama在系统启动之后就会在后台调用,可以随时调用。

brew services start ollama

需要注意的是,如果你是了此种方式。那么每次ollama升级之后,需要使用

brew services restart ollama

重新启动Ollama服务。

服务局域网

默认情况下,Ollama只会关注localhost的11434端口,因此只能从本机访问。局域网的其它电脑无法使用。我们可以修改设置,然后重启Ollama服务。这样局域网内的其它电脑就都可以使用Ollama了。

launchctl setenv OLLAMA_HOST "0.0.0.0"
brew services restart ollama

我们可以这个命令,查看Ollama运行的状态

lsof -i -P | grep ollama

如果你看到的是这个,就证明成功了

ollama      602 zhaoxin    3u  IPv6 0xb435894e8a5320f      0t0  TCP *:11434 (LISTEN)

如果你想固定上面的设置。那么就需要修改/opt/homebrew/opt/ollama/homebrew.mxcl.ollama.plist文件,为它添加:

<key>EnvironmentVariables</key>
<dict>
    <key>OLLAMA_HOST</key>
    <string>0.0.0.0</string>
</dict>

然后停止Ollama服务,并重新开启。注意,我发现用restart不行。必须先stop,然后重新start。不然重启之后,就还是只有localhost。

brew services stop ollama
brew services start ollama

https://github.com/ollama/ollama/blob/main/docs/faq.md
https://github.com/ollama/ollama/issues/3581

模型选择

模型的选择首选是基于功能。不同的模型擅长的领域不同。比如某些模型不支持特定的语言,某些模型具备识别图片的能力,有些模型更擅长编程等。

其次就是版本的选择。总的来说,就是越小的模型,运行时的反应越快,但是同一个模型,越大的模型的输出结果越好。因此,我们需要要在结果准确性和推理速度中作出权衡。一般来说,如果你的电脑只有8GB内存。那么你也就只能选择7B以下的模型,默认模型能跑就不错了。而如果你有16GB内存,那么你最高可以运行13B的模型。而7B模型,也可以选择参数更高的版本比如7B-4bit-K_M之类的。它会标准的标准的4bit性能要好一些。

导入模型

Ollama是llama.cpp的。它支持所有gguf格式模型文件。因此我们在抱抱脸上搜索模型名+gguf,就能下载Ollama官网没有的模型。然后可以通过创建Modefile文件的方式进行导入。格式就是:

FROM gguf文件地址

然后执行

ollama create 模型名 -f Modefile

等一会,这个模型就被导入Ollama了并能使用了。

API调用

下面这段只有程序员需要。

仿OpenAI调用

Ollama支持OpenAI的API的兼容调用方式。这样可以更好复用代码。不过这种方式调用目前只支持chat api的调用。并且不支持Vision。

https://github.com/ollama/ollama/blob/main/docs/openai.md

因此如果你使用下面这两个API的时候,还是需要Ollam的自有API。

ListModels调用

https://github.com/ollama/ollama/blob/main/docs/api.md#list-local-models

Vision调用

https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-chat-completion

关于本地跑大模型我的想法

我之前还有想法想要换成64GB内存的电脑,这样可以更好的地跑本地大模型。但是随着我对于本地大模型使用的增加,我现在开始觉得购买性能更强大的电脑跑本地大模型,可能不是一笔划算的买卖。

这是因为,最近几年,支持本地大模型的新硬件层出不穷,算力的提升没几个月就提升一个台阶。因此,现在花大钱购买的支持本地大模型产品,可能几个月后同价格就有更好的产品。

此外,本地大模型目前的运行,都还是折衷的产品。要么是模型规模小,要么是模型在使用时必须是缩限的版本。究其原因,还是可以利用的显存不足。并且,实际输出的结果和速度也不如线上。

并且线上大模型价格也在不断降低,甚至还有的处于测试阶段的大模型,使用是免费的。

那么是不是本地跑大模型就一无是处了呢?也不是。本地大模型更适合需要消耗大量token的领域。比如,图片识别(以文搜图)。跑这类应用,如果使用在线大模型,会消耗大量token,不够经济。此时用本地大模型来跑,就划算很多了。

墙最大的问题就是浪费时间

按照我国的网络环境,不翻墙是不行的。好多最新的技术根本接触不到。但是翻墙也不是你花了钱,研究了之后就能一劳永逸了。还需要不断的总结、学习、应对新情况。

研究如何翻墙需要大量时间

以我自己为例,最初是采用每个设备单独翻墙的方式。这么做的缺点是翻墙软件需要一直开着,对于一些移动设备来说,耗电较大。

并且有的设备,比如Apple TV不支持翻墙软件(现在支持了),使用起来十分困难。

后来我改成了使用路由翻墙的方式。这么做,通过该路由上网的设备就等能翻墙了。不过,这个也有缺点,就是路由的性能有限,并不能全部发挥出VPS服务器的性能。以我的小米AX3600路由为例,下载速度只能打到3MB/s左右。如果用电脑翻墙,则速度可以达到10MB/s以上。

翻墙后还需要再次考虑如何获得最大的翻墙网速

我最新的策略是,路由器翻墙,然后在路由器翻墙的软件里选择局域网过滤,在黑名单中添加我的台式机,然后台式机使用单独的翻墙软件。

这样台式机就可以单独使用翻墙软件,并不受路由器性能的影响。而路由器翻墙可以保证Apple TV翻墙,并且使用电池的移动设备也可以不必运行翻墙软件。

不过台式机使用单独的翻墙软件之后,还有一点需要注意。就是Clash要使用Pro版,不然的话,一些软件比如GitHub Desktop,会无法正常使用。