利用 Ollama 與 Openwebui 搭建本地 LLM 服務

一陣子沒投入大語言模型,就會發現有一些驚奇。倒也不是有多大的進步,很是佈屬上有了很大的便利性。所謂的佈屬大語言模型,其實是有點浪費時間的,因為還處於起步階段,很多步驟都還是用手動設定的,所以很多事情都還很麻煩。

終於,到了一個比較成熟的時間了,雖然還有待改進,但也是方便許多。今天要講的就是這Ollama與 Openwebui 的組合。

Ollama

Ollama 可以說是提供了一個統一的介面,來進行大模型的推論、 上傳與管理,使得以往要自行針對每個模型的客制化語法不用再關心,而且其也提供了相容的大語言模型下載,都給你處理的妥妥當當的。使用 Ollama 就著重於這個 API 就好了,而不必在分心於 LLM 用法的事務。但  Ollama 在執行時,並沒有 UI 介面可檢示,僅有 API可使用。

ollama 還是提供了簡易的 cli 指命可以來下載各個大語言模型,可以利用 CLI 進行問答的部份,當然用起來就沒那麼順手。

另外 Ollama 在使用的大模型時,會自動判別資源是否充足,而使用 GPU 或 CPU,所以可以避免記憶體不足的情況,這點對於平常使用時非常有幫助。以往常常碰到的 OOM 只能重啟模型,就不太會碰到了。

Openwebui

Openwebui 簡單的說,就是提供一個類似 ChatGPT 的介面,來進行與大語言模型的問答。而其 API 的接口,就是與 Ollama 搭配的,所以這2個可以說要一併使用,也相得益彰。

安裝

ollama 需要使用管理員權限,而 openwebui 建議使用 docker 運行,官網也沒解釋要怎麼手動來安裝。這也是目前比較簡單的運行方式,目前先以 Windows 為目標來進行。

安裝 Ollama

安裝 Ollama, 在其官網下載進行安裝即可。但由於其在模型下載時,會於預設位置安裝,比較難管理,建議可設定環境變數來指定其下載位置。

安裝完 ollama 後,可以透過 cli 管理模型,進行其它模型下載或刪去。

安裝 openwebiui

安裝 openwebui 需要使用 Desktop Docker, 安裝完 docker 後, 依其官網所示, 用下列命令下載 docker image

安裝完後,就可以瀏覽 http://127.0.0.1:3000 來進行登入。第一次需進行註冊,首位註冊者就是管理員,email 隨便填即可。登入後畫面如下

下載模型

openwebui 終究只是一個前端的 UI, 模型的下載還是要由 Ollama 所認知。

方法1: 由 ollama cli

從 admin –> setting –>模型, 從 ollama.com 下載模型。可以在其網頁上瀏覽可用的模型,最後會有下載的指令,如下

在dos命令裡下載即可

方法2: 由 openwebiui 上傳

此方法不建議。

方法3: 模型轉移

要把 Ollama 下載的模型轉移到另一台的話,可以使用命令

會出現類似的回報,也是所謂的 modelfile。把下面的內容存起來,複製 FROM 後面指的檔案,再移到其它機器進行匯入。而此處 FROM 的檔案當然也要改到適當位置和名稱。

匯入時下達以下命令, 就可以了。

 

對話

當完成這一些後,建議可以做一個重啟, ollama 會自動啟動,openwebui 也會自動啟動。此時瀏覽 http://127.0.0.1:3000後就可以進到對話的頁面了。

Openwebiui 優化

由於 LLM 一直是一種很吃vram的東西,所以在載入模型時有些參數的調整,對於速度就會有大的影響。要進行設定請以openwebui 的管理員進行設定,也就是第一個註冊的用戶。從左下角的用戶名稱點入後,按下設定。

減少前後文 TOKEN 數

常用 –> 進階參數

  1. 上下文長度: 768
  2. 最大 Token 數: 384
  3. 保持活躍: -1

由於上下文長度和 Token 數會影響 VRAM 的使用量,當VRAM不足時就會變成CPU來連算導致回應緩慢. 另外, Ollama 在一個 LLM 一陣子不使用後會自動將其卸載,這樣會導致要使用時要再等待一段時間,所以此處將其改為 -1 ,就不會卸載了。

不要自動標題

介面 –> WebUI 擴充參數 –> 自動生成標題. 由於自動生成標題會導致其載入另一個LLM來產生標題,導致反應很慢,此處建議關掉此功能。

Windows 上安裝 HWiNFO

由於 Ollama 都會偷偷卸載模型,所以觀察 GPU 和 VRAM 的使用率就很重要。從 Linux 上的話,可以使用 nvtop 來觀察。從 Windows 上的話,就可以利用 HWiINFO 這到工具來辦到。

 

Leave a Reply(Name請以user_開頭,否則會被判定會垃圾息)

請輸入答案 2 + 1 =