apple sillicon在llama.cpp下運行l(wèi)lama2過程
蘋果芯片下部署大模型算是比較小眾,所以寫一篇過程,記錄一下。llama2的模型比較大,可以通過申請下載。llama2在mac的部署分為兩種,其中一種是text generation webui,text generation是比較全面的工具,支持多種模型讀取形式,包括transformer,llama.cpp,exllama,?另外一種是直接使用llama.cpp。
首先,講一下為什么不建議直接用text generation webui的方式搭建,因為text generation的llama.cpp調(diào)用是通過llama-cpp-python(一種python wrapper),llama-cpp-python不一定會指向本地的llama.cpp(llama.cpp的更新速度很快,llama-cpp-python不一定跟得上),有可能會導致llama.cpp下轉換的llama2模型在text generation webui無法正確讀出,或者即使能夠使用,但是沒有mps加速。hugging-face下TheBloke提供了一批轉換過的llama2模型,但是這些在text generation webui下不支持mps加速。fp16下,帶mps加速的會比不帶mps加速的快3倍。
過程分為幾步,環(huán)境的搭建,模型性能調(diào)優(yōu),寫提示。
環(huán)境搭建
安裝的大致順序如下:
xcode - > vscode -> brew -> python -> github desktop
github desktop把llama.cpp clone到本地,可以隨時更新最新版本。
在llama.cpp目錄下pip install?-r requirement.txt 下載依賴庫,并把mps選項打開編譯安裝。
模型性能調(diào)優(yōu)
默認70b,使用python convert.py 模型路徑,把模型轉換為ggml。
使用如下./main -m ./models/70B/ggml模型文件.bin -gqa 8?-ngl 1 -t 線程數(shù)量 進行試運行。
運行的log如果有metal performance,mps則成功被調(diào)用,否則重新打開mps選項并編譯llama.cpp。在mps打開的情況下,線程數(shù)量不一定是mac的線程最大值為最快,一般來說,t為2/3*tmax為最優(yōu)。gqa在70b下強制為8,否則會報錯。ngl設為一個大于等于1的數(shù)值,就可以打開mps加速。
建議多做嘗試,并記錄速度,把參數(shù)調(diào)整至合適。
寫提示文本
在prompts下復制chat_with_bob.txt的文本,編寫提示詞,這一部是用來設置啟動時的提示詞,類似于text generation的角色卡。
最終運行
./main -m ggml模型文件?-gqa 8?-ngl?1 -t 16?-f 提示詞 -r "User:" --repeat_penalty 1.0 --color -i
其中,-r "User:"是提示文本的用戶輪。這里t為16,我試下來會更快一些。