指南/Ollama占用内存过多
Ollama在Mac上占用内存过多?如何查看加载了什么,并把它卸载
简要回答
Ollama会在模型最后一次作答后把它留在内存里五分钟,这样下一个问题就能很快得到回答。所以你不再用它时,它仍然占着好几GB。运行ollama ps可以查看加载了哪些模型,以及各自什么时候会被卸载;运行ollama stop加上模型的名称,可以立即卸载它。模型占多少内存,取决于它的大小和你运行它时所用的上下文长度。Vitals是一款Mac系统监控工具,在菜单栏中显示Ollama的内存、图形芯片的负载和Mac的内存压力。
如何查看并释放Ollama的内存
- 01 在“终端”中运行
ollama ps。每一行是内存中的一个模型,附上它的大小、是否在图形芯片上运行,以及还有多久会被卸载。 - 02 用
ollama stop加上模型的名称可以立即卸载,例如ollama stop llama3.2。内存一两秒内就会回来。 - 03 打开活动监视器,点按“内存”,查看底部的“内存压力”。绿色表示模型装得下。加载模型时出现黄色或红色,表示以目前打开的其他东西来说,它太大了。
- 04 要让模型早一点卸载,就设置它们保留多久。在“终端”中运行
launchctl setenv OLLAMA_KEEP_ALIVE 1m,然后从菜单栏图标退出Ollama,再重新打开。 - 05 如果每次加载模型Mac都内存不足,就换一个更小的模型,或者同一个模型的更小版本。
ollama list会显示你已有的模型和它们的大小。
keep-alive设为0,模型一答完就卸载;设为-1,模型会一直加载着,直到你停止它。与Ollama通信的App可以在每次请求中设置自己的值,所以模型有时会比你设置的时间留得更久。
在自己的Mac上运行模型,意味着要把它整个放在内存里。搭载Apple silicon的Mac,处理器和图形芯片共用同一块内存,所以在别的电脑上需要独立显卡的模型,在这里装得下,但用的是你的App也在用的同一块内存。在16 GB的Mac上运行8 GB的模型,剩给其他一切的就是8 GB。Ollama占着这么多并不是内存泄漏;它占着的就是模型。下表列出决定这个数字的因素。
是什么决定了Ollama的内存
| 你看到的现象 | 原因 | 怎么做 |
|---|---|---|
| 不聊了之后仍占着好几GB | 模型会保持加载五分钟 | ollama stop,或把keep-alive设短一些 |
| 占用的内存比模型文件还大 | 你运行它时所用的上下文也需要内存 | 使用更小的上下文长度 |
| 内存里同时有两个模型 | 第一个还没卸载,又请求了第二个模型 | ollama ps,然后停止你没在用的那个 |
| 内存压力为黄色或红色,Mac很慢 | 以可用的内存来说,模型太大了 | 换更小的模型,或关闭其他App |
| 回答很慢,CPU很忙 | 模型有一部分没能装进图形芯片 | ollama ps会显示怎么分配的;换一个更小的模型 |
Ollama为什么让模型保持加载
加载模型就是把好几GB从磁盘读进内存,需要几秒到一分钟。如果每个问题都这样做,每次回答都会很慢,所以Ollama会在模型最后一次使用后保留它五分钟,之后再卸载。每来一个新问题,计时就重新开始。如果Mac上有App每隔几分钟就问模型点什么,比如编辑器的自动补全,模型就永远不会卸载。
这个设置叫keep-alive。OLLAMA_KEEP_ALIVE会更改所有模型的默认值;设为0会立刻把内存还回来,代价是每次第一个回答都很慢。
模型需要多少内存
一般来说,内存就是模型文件的大小,加上给对话留的空间。80亿参数的模型在常用的压缩程度下约为5 GB;300亿参数的约为20 GB。ollama list显示的磁盘占用大小是不错的初步估计。
上下文长度是人们容易忽略的部分。它是模型一次能记住多少文字,这部分内存在模型加载时就预留了,不管你用不用满。小模型配上很长的上下文,占用可能比模型本身还多。如果ollama ps显示的大小远高于文件大小,原因就是上下文。
你的Mac装得下这个模型吗?
LM Studio和其他App
任何在本地运行模型的App都是如此。LM Studio会让模型保持加载,直到你把它弹出或闲置时间用完,并在窗口顶部显示已加载的模型。替你运行模型的编辑器和聊天App,在背后做的也是同样的事。内存就是模型,不管是哪个App占着它。
Vitals能多做什么
Vitals会显示加载的模型让Mac付出了多少,而且就在你工作时看得见的地方。
- Ollama的内存显示为一行,已计入它的帮助程序
- 菜单栏中的内存压力和可用内存,让你一眼看出模型装不装得下
- 图形芯片的负载,在菜单栏和它自己的标签页中都有,附上正在使用它的App
- 某个App内存不断增长时发送通知
- 按小时显示哪个App耗能最多:运行模型是Mac用电池时最耗电的事情之一
须知
- Vitals显示的是Ollama占着的内存,而不是加载了哪个模型。
ollama ps会显示这一点。 - Vitals不会卸载模型。
ollama stop可以。
常见问题
Ollama为什么占用这么多内存?
它把模型放在内存里。模型在最后一次作答后会保持加载五分钟。运行ollama ps查看加载了什么,运行ollama stop加上模型的名称把它卸载。
如何在Ollama中卸载模型?
运行ollama stop加上模型的名称。要让模型自己早一点卸载,把OLLAMA_KEEP_ALIVE设为更短的时间。
如何更改Ollama在Mac上让模型保持加载的时间?
在“终端”中运行launchctl setenv OLLAMA_KEEP_ALIVE 1m,填上你想要的时间,然后退出并重新打开Ollama。用0表示立刻卸载,用-1表示让模型一直加载着。
用Ollama运行模型需要多少内存?
大约是模型文件的大小,加上给上下文留的空间。在16 GB的Mac上,约8 GB以内的模型能给其他App留出余地。
Ollama占用的内存为什么比模型的大小还多?
上下文长度所需的内存在模型加载时就预留了。很长的上下文可能多占好几GB。如果用不着,就用更小的上下文运行模型。
我没在用Ollama时,它会占用内存吗?
只在最后一次作答后的五分钟内占用,除非有App一直在问它,或者keep-alive时间被调长了。之后模型会被卸载,Ollama占用的就很少了。
有没有能显示本地模型在我的Mac内存里装不装得下的App?
Vitals在菜单栏中显示内存压力、可用内存和图形芯片的负载,让你在工作时就能看到加载的模型让Mac付出了多少。