指南/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晶片的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付出多少代價。
詞彙表中的相關條目
更多指南
- Mac為什麼這麼慢
- 是什麼在消耗Mac的電池
- 哪個App在使用我的CPU或記憶體
- Mac為什麼無法睡眠
- Chrome占用太多記憶體
- 為什麼Mac的風扇這麼吵
- 如何控制Mac的風扇轉速
- 如何釋放Mac的RAM
- Docker使用太多記憶體
- 如何停止Docker容器
- Mac音量混音器
- Cursor使用大量CPU
- Claude Code使用太多記憶體
- Claude Code和Codex的用量上限
- Claude App佔用大量CPU
- Codex佔用大量CPU
- 活動監視器替代方案
- iStat Menus替代方案
- Stats替代方案
- Mac版工作管理員
- 最佳Mac系統監控工具
- 最佳Mac選單列監控工具
- 最佳Mac音量混音器
- Mac上的htop
- Mac版Process Explorer
- 最好的Mac溫度監控工具