聽說有一些在個人電腦只用 CPU 就能執行 LLaMA 模型的方法,找了一些資料,終於嘗試出來了,把過程記錄在此。其實還有許多參數搞不懂,但至少先求有,再求好了。
最主要的參考是來自這篇文章
text-generation-webui 快速使用各種語言模型的工具
底下是記錄過程,其實我已經在 D 碟試過了,這次要重新在 C 碟試試,看固態硬碟跑起來會不會順一點。
安裝程式
首先,到 oobabooga 的 Github 找到 text-generation-webui Windows 的安裝程式。
下載 oobabooga-windows.zip
我是解壓縮在 C:\App\oobabooga_windows 目錄中。
開啟命令提示字元視窗(DOS 視窗),直接執行 start_windows.bat
上面有提到,要載入環境要用
conda activate C:\App\oobabooga_windows\installer_files\env
卸載則要用
conda deactivate
接著問我 GPU
我只有內建的 Intel,所以選 D
此時畫面跑很快,有很多訊息都直接跑過去,所以第一次在 D 安裝時都沒注意,幸好當時有把訊息存起來,事後研究才注意到。
底下有提到,安裝結束後,要在 CMD_FLAGS.txt 這個檔案中加入 --cpu 這個旗幟。
這裡還有一個警告,說我的 conda 是舊的 23.3.1,有更新的 23.7.3
可用此命令去安裝
conda update -n base -c defaults conda
一直在安裝,防火牆大哥也三不五時出來擋一擋。
跑了一陣子,竟然完成了。
D 碟安裝時遇到的錯誤
為什麼說竟然完成了?
因為之前在 D 碟安裝時,遇到如下錯誤訊息:
running build_rust
error: can't find Rust compiler
If you are using an outdated pip version, it is possible a prebuilt wheel is available for this package but pip is not able to install from it. Installing from the wheel would avoid the need for a Rust compiler.
To update pip, run:
pip install --upgrade pip
and then retry package installation.
If you did intend to build this package from source, try installing a Rust compiler from your system package manager and ensure it is on the PATH during installation. Alternatively, rustup (available at https://rustup.rs) is the recommended way to download and update the Rust compiler toolchain.
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for safetensors
Successfully built sentence-transformers
Failed to build safetensors
簡單來說,就是找不到 Rust 的 compiler,可以試著執行
pip install --upgrade pip
更新 pip,但我試了沒用。
所以選第二個方法,安裝 Rust,我沒有用上面的網址
而是去 https://www.rust-lang.org/zh-TW/tools/install 下載 64 位元版,並且進行安裝。
安裝時要有 Visual Studio C++ Build tools,我想我有安裝 VS,所以很順利就完成了。
cd 到 D 碟的 oobabooga_windows
再次執行 start_windows.bat
會有錯誤,不過也載入基本環境了,就繼續安裝
cd oobabooga_windows\text-generation-webui
執行
pip install -r requirements.txt
後來就成功了。
這次在 C 碟安裝時,我有刻意把 Rust 路徑修改,我以為會再次出現同樣的錯誤,但竟然直接完成了,大概是修改的地方沒有影響吧。
看這個畫面,其實還有一些警告訊息,但之前 D 碟安裝也有,好像也沒有大礙。
執行瀏覽器界面
此時就可以開瀏覽器,進入 http://127.0.0.1:7860
成功!
更新 conda
此時還無法對話,因為沒有載入語言模組。
不過我要先更新 conda,就是之前的建議命令:
conda update -n base -c defaults conda
也要把 --cpu 寫到 CMD_FLAGS.txt 檔案中。
畫面是更新的版本,很快就順利完成了。
載入語言模組
再次啟動伺服器,可以用
CD C:\App\oobabooga_windows\
python webui.py
也可以直接啟動
start_windows.bat
進入瀏覽器後,選上方紅框的 Model。
此時可以把要下載的語言模型貼到右下方紅框,再按下下方的 Download 即可。
語言模型可以到 huggingface 去找,貼上去的格式就是 作者/模型,畫面中有說明。例如:meta-llama/Llama-2-7b
不過上面的方式有個缺點,好像會把全部的資料都下載下來。
它會在這裡 oobabooga_windows\text-generation-webui\models\ 建立子目錄,把所有資料都下載進去。
如果只想單獨下載某一個模型,可自行下載後,再放在這裡 oobabooga_windows\text-generation-webui\models 即可。
這是 LLaMA 2,GGML 是只要 CPU 就能執行的版本。
https://huggingface.co/TheBloke/Llama-2-13B-chat-GGML/tree/main
這是台灣做的
https://huggingface.co/audreyt/Taiwan-LLaMa-v1.0-GGML/tree/main
要選哪一個,要看自己的記憶體,理論上數字愈大的愈好,但記憶體要夠用才行。13B 就是 130億個參數,7B 就是 70億個參數。
我試這二個是可以的
llama-2-13b-chat.ggmlv3.q4_K_M.bin
Taiwan-LLaMa-13b-1.0.ggmlv3.q4_K_M.bin
那個 K_M , K_S 我就不懂了。
把語言模組複製到 models 目錄後,重新啟動伺服器,在 Model 頁,左上角 Model 下拉就可以看到現有的模組。
我選 Taiwan-LLaMa-13b-1.0.ggmlv3.q4_K_M.bin
Model loader 自動跳到 llama.cpp(專案在此),底下參數有人說可以不用改,我也不懂。
按下 Load,就會載入模型了。
網路上是有找到一些說明:
threads = 如果設置為 0,系統將自動確定要使用的線程數量。
n_batch = 放在一起以在查詢過程中發送的批次的 tokens。該值是 n_ctx 的除數。即 512 個 token / 2048 個 token。
n-gpu-layers = 卸載到 GPU 以幫助提高性能的層數。
n_ctx = token 限制。2k 是默認值,OpenAI 將其用於許多舊模型。您可以獲得具有 4k 甚至 8k 限制的 GGML 和 GPTQ 版本,但這需要較好硬體才能完成。
回到 Chat 頁,問了第一個問題,真是令人淚流滿面,往好處想,至少能動了。
再問還是不行,至少知道 GPT,Bard,Bing 都比它強。
換 llama-2-13b-chat.ggmlv3.q4_K_M.bin 試試。
雖然看不太懂,但似乎好多了。
唬弄我啊?
試著唬它,想不到它沒被騙,知道台灣最高的山是玉山,高度也沒有錯。但後來又亂說一通了。
使用 Python 執行
底下是抄來的程式,發現也可以執行。
<path> 請填入模型的實際目錄,語言模型也改成正確的名稱。
from llama_cpp import Llama
llm = Llama(model_path="/<path>/llama-2-13b-chat.ggmlv3.q4_K_M.bin")
output = llm("Q:台灣最高的山在哪裡? A: ", max_tokens=32, stop=["Q:", "\n"], echo=True)
print(output)
執行結果:
奇怪的是,上面的回應就是用中文了,但在瀏覽器界面中,卻一直用英文回答。
實驗到此暫時告一段落了。
- 瀏覽次數:2904
發表新回應