指南/Ollama佔用過多記憶體

Ollama在Mac上佔用過多記憶體?如何查看載入了什麼,並將它移出記憶體

Atta 🐬

Vitals創辦人

發佈於

簡短回答

Ollama會在模型最後一次回答後,把它留在記憶體中五分鐘,好讓下一個問題能很快得到回答。所以你不用它時,它仍然佔著好幾GB。執行ollama ps可以查看載入了哪些模型,以及各自何時會移出記憶體;執行ollama stop加上模型名稱,可以立即將它移出。模型佔用多少記憶體,取決於它的大小和你執行時所用的上下文長度。Vitals是一款Mac系統監控工具,會在選單列中顯示Ollama的記憶體、圖形晶片的負載和Mac的記憶體壓力。

如何查看並釋放Ollama的記憶體

  1. 01 在「終端機」中執行ollama ps。每一列是記憶體中的一個模型,附上它的大小、是否在圖形晶片上執行,以及還有多久會移出記憶體。
  2. 02 用ollama stop加上模型名稱可立即將它移出,例如ollama stop llama3.2。記憶體一兩秒內就會釋放出來。
  3. 03 打開活動監視器,按一下「記憶體」,查看底部的「記憶體壓力」。綠色代表模型放得下。載入模型時出現黃色或紅色,代表以目前開著的其他東西來說,它太大了。
  4. 04 想讓模型早點移出記憶體,就設定它們保留多久。在「終端機」中執行launchctl setenv OLLAMA_KEEP_ALIVE 1m,然後從選單列圖像結束Ollama,再重新打開。
  5. 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放得下這個模型嗎?

最可靠的檢驗,是在模型已載入、平常用的App也都開著時,看看記憶體壓力。綠色:放得下。黃色:macOS正在壓縮記憶體來騰出空間,速度會稍微變慢。紅色:系統正在交換檔到磁碟,模型和Mac都會變慢。因為圖形晶片放不下而有一部分在處理器上執行的模型,也會慢很多;ollama ps會說明它是如何分配的。

同一個模型的較小版本,通常品質差不了多少,卻能省下很多記憶體。在16 GB的Mac上,約8 GB以內的模型還能留下工作的空間。Mac如何共用記憶體,請參閱統一記憶體。

LM Studio和其他App

任何在本機執行模型的App都是如此。LM Studio會讓模型保持載入,直到你將它退出或閒置時間結束,並在視窗頂部顯示已載入的模型。替你執行模型的編輯器和聊天App,背後也是這樣做。不管是哪個App佔著,那些記憶體就是模型本身。

Vitals多了什麼

Vitals會顯示已載入的模型讓Mac付出多少代價,而且就在你工作時看得到的地方。

  • Ollama的記憶體顯示為一列,已計入它的輔助程序
  • 選單列中的記憶體壓力和可用記憶體,讓你一眼看出模型是否放得下
  • 圖形晶片的負載,在選單列和它專屬的標籤頁中都看得到,並附上正在使用它的App
  • 某個App的記憶體不斷增加時傳送通知
  • 逐小時顯示哪個App耗用最多能源:執行模型是Mac使用電池時最耗電的工作之一

小提醒

  • Vitals顯示的是Ollama佔用的記憶體,而不是載入了哪個模型。ollama ps會顯示這一點。
  • Vitals不會將模型移出記憶體。ollama stop才會。
購買Vitals $15 一年更新$9,或在首發期間以$15終身使用,之後為$39。一次付清,14天內可退款。

大家常問的問題

為什麼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付出多少代價。

詞彙表中的相關條目

更多指南