2024年7月29日 星期一

透過 Ollama 本地部署 Llama 3.1 大型語言模型服務

開源模型的好處是讓企業得以根據需求用公司內部資料來建置模型,而不受封閉模型供應商的限制。

Llama 是 Meta 釋出的開源模型,Meta 於 7/23 釋出了 Llama 3.1 其亮點 405B (4,050 億參數) 是 Meta 迄今為止最強大的模型, 趁前兩天颱風假的空檔利用 Ollama + Llama 3.1 來架設一個私有的大型語言模型服務( LLM Model )。

Ollama 是一個開源軟體,使用者可以在自己的硬體上執行大型語言模型服務。選用 Ollama 是因為其架設容易且支援的模型總類很多,官方有提供 Windows, Apple, Linux OS 的安裝程式,可用短短的幾分鐘就可以在自己的個人電腦上架設完成大型語言模型服務。


本篇所採用的硬體如下:
CPU: Intel i7-12700
RAM: 64G DDR5
Storage: 1TB PCIe 4.0 NVMe M.2 SSD
Graphics: Nvidia GeForce RTX 4080 SUPER (16 GB GDDR6X VRAM)
OS : Ubuntu 22.04
需要網際網路連線。
Skill: Linux 基本操作、Docker操作、Python與套件安裝。

本文安裝環境主要以 Ubuntu 22.04 為主,Windows 與 Mac 相關操作類似但細節部分有興趣的人就得靠網路搜尋一下了。至於顯卡部分,在操作 Llama 3.1 8B 模型則可有可無(但主機記憶體最好大於16G以上),操作 Llama 3.1 70B 模型則PC記憶體最好大於64G且顯卡記憶體最好大於16G以上,至於....405B 我的設備跑不動的。
所以如果你的顯示卡是30系列以下,建議就玩Llama 3.1 8B ;如果是 40系列且有8G(含)以上的顯卡記憶體,可以試試跑跑  Llama 3.1 70B 模型,在我上述的環境下 70B 不會出現記憶題不足的情況,兩者差別是回答得速度快慢與準確。
另外由於不同環境安裝上就會出現不同狀況,所以本文在安裝及基本操作的過程部分,並不會過於詳述,基本技能部分列於上述 Skill 部分,如果安裝過程有問題網路上有很多人分享影片,搜尋一下按影片操作即可 (我學習過程亦是如此)。

首先,先來安裝 Ollama ,進入官網依照作業系統選擇下載安裝方法,Linux則比較簡單在命令列下輸入以下指令即可:
curl -fsSL https://ollama.com/install.sh | sh

安裝完成後,接著輸入 ollama run llama3.1 就會開始下載 llama3.1 8B 模型,等待一小段時間後....沒錯,就安裝完成了!此時你可以看到三個大於 >>> 的符號,在此符號下就可以輸入你要詢問的問題了。

如需安裝 Llama 3.1 70B 或其他模型也是如此, 

Ollama 支援的模型可以到官網 https://ollama.com/library 找到,例如Google的 gemma2 (https://ollama.com/library/gemma2)、微軟的 phi3 (https://ollama.com/library/phi3) 甚至於 台灣TAIDE團隊 llama3-taide-lx-8b-chat-alpha1 (https://ollama.com/cwchang/llama3-taide-lx-8b-chat-alpha1)、...
下載的方法就是搜尋到要安裝的模型後,複製靠右上方的執行指令直接輸入到命列列上即可。



在Linux下 Ollama 服務則用 sudo systemctl <status> ollama 指令,例如要停用則是輸入 sudo systemctl stop ollama。
如需要看已經下載了那些模型可以使用則輸入:ollama list
接著我們可以隨便問個問題看看是否有回應。

完成上述,接著我們可以試試看本地端API的操作測試,輸入下列指令得到一連串的回應表示本地端API的操作正確,你可以在這一連串的回應中找到類似 "response":"2 + 2 = 4.",的回答。 
curl http://localhost:11434/api/generate -d '{ "model": "llama3.1", "prompt": "What is 2+2?", "stream": false }'

當然如果需要使用Python來操作本地端API程式碼如下:

到此,如果沒問題的話Ollama 本地部署 Llama 3.1 大致上就完成。接著下來,為了使用上方便我們可以利用 Open WebUI 這個 GUI 網頁來進行對話,  Open WebUI  是個類似於 ChatGPT 一樣的操作網頁,這裡參照  Open WebUI GitHub 安裝說明中採用 docker 方式進行安裝是最簡單的方法:
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
詳見 Open WebUI GitHub安裝說明。

我們可以用 docker container ls -a 來看是否正確安裝:

如果正確則打開瀏覽器輸入: http://localhost:3000/ 或 <http://IP address>:3000/ 就可以看到一個登入/註冊的畫面,此時第一個註冊的帳號就是管理者。接著點選右上方圖示進入設定畫面,在常用選項中-->系統提示詞輸入: "回應使用**繁體中文**" 此時對答過程中皆會使用繁體中文進行回應。


接著介面的部分-->預設模型可以選用 llama3.1 8b 模型,接著選擇管理設定可以進入到管理員控制台,然後選擇 "模型" 此時我們可以在這裡進行安裝、刪除模型等控制。

如果在前面已經安裝過了模型 (命令列下用 ollama list 查詢),此時應該會在 "刪除一個模型" 下拉選單中看到,如果此時沒看到任何以安裝的模型,這表示沒有與 ollama本地端API(埠號:11434)正確連線,此時需要修改 /etc/systemd/system/ollama.service 內容如下:

sudo vi /etc/systemd/system/ollama.service
在 [Service] 下增加:
Environment="OLLAMA_HOST=0.0.0.0"
存檔後重啟服務:
sudo systemctl daemon-reload
sudo systemctl restart ollama

此時,在此打開 Open WebUI 這個 GUI 網頁就可以正常的模型操作。
接下來我們可以隨便提問問題,首先在網頁昨上方選擇模型在下方輸入框中輸入要詢問的問題就可以完成操作了。

至此,全部的安裝皆已完成。不過由於開源大型語言模型大多皆由國外所製作,所以如果詢問繁體中文的問題大多會遇到牛頭不對馬嘴的情況,此時就需要進行一些經常聽到的微調處理讓LLMs 精確地回答領域的問題。我在找個有空的時間下一篇來寫個類似Q&A方式的 fine-tuning (微調) 

當然如果覺得國外的模型不適合繁體中文,國科會TAIDE計畫 也有用 Llama 3 針對繁體中文進行優化的模型稱為 Llama3-TAIDE-LX-8B-Chat-Alpha1,已可在 Ollama 官網中 Models 搜尋到,有興趣的可以下載下來試試。

後記:
我每個月付費的ChatGP也會出現答非所問....



參考:

沒有留言:

張貼留言