LLAMA介紹
LLaMA是由Facebook的母公司Meta AI設計的一個新的大型語言模型。LLaMA擁有70億到650億個引數的模型集合,是目前最全面的語言模型之一。
Llama是目前唯一一個可以進行本地部署和本地訓練的大型模型,對各種提問有非常好的處理能力。非常適合個人和中小型企業,構建自己的大資料模型。
很多人都說是ChatGPT的平替。透過微調來滿足特定小眾行業的使用,將會在未來有非常大的潛力。
Mac上由於沒有Nvidia顯示卡的加持,無法配置CUDA進行深度學習。好在有大神製作了C++的庫,能實現小成本在低配Mac上跑模型的能力。
llama.cpp
是一個推理框架,在沒有GPU跑LLAMA時,利用Mac M1/M2的GPU進行推理和量化計算。
Mac跑LLAMA唯一的路。同樣也可以在Windows下面跑起來。
它是ggml這個機器學習庫的衍生專案,專門用於Llama系列模型的推理。llama.cpp和ggml均為純C/C++實現,針對Apple Silicon晶片進行最佳化和硬體加速,支援模型的整型量化 (Integer Quantization): 4-bit, 5-bit, 8-bit等。社群同時開發了其他語言的bindings,例如llama-cpp-python,由此提供其他語言下的API呼叫。
https://github.com/ggerganov/llama.cpp
安裝llama.cpp
本地快速部署體驗推薦使用經過指令精調的Alpaca-2模型,有條件的推薦使用6-bit或者8-bit模型,效果更佳。 下面以中文Alpaca-2-7B模型為例介紹,執行前請確保:
1、系統應有make(MacOS/Linux自帶)或cmake(Windows需自行安裝)編譯工具
2、建議使用Python 3.10以上編譯和執行該工具
3、必裝的mac依賴
xcode-select --install # Mac的Xcode開發者工具,基本是必裝的,很多地方都需要用到。
brew install pkgconfig cmake # c和c++的編譯工具。
1、原始碼編譯
git clone https://github.com/ggerganov/llama.cpp
2、編譯
對llama.cpp專案進行編譯,生成./main(用於推理)和./quantize(用於量化)二進位制檔案。
make
Windows/Linux使用者如需啟用GPU推理,則推薦與BLAS(或cuBLAS如果有GPU)一起編譯,可以提高prompt處理速度。以下是和cuBLAS一起編譯的命令,適用於NVIDIA相關GPU。
make LLAMA_CUBLAS=1
macOS使用者無需額外操作,llama.cpp已對ARM NEON做最佳化,並且已自動啟用BLAS。M系列晶片推薦使用Metal啟用GPU推理,顯著提升速度。只需將編譯命令改為:LLAMA_METAL=1 make,
LLAMA_METAL=1 make
3、檢查
編譯成功會在目錄下產生main等可執行的命令,下面轉換量化模型檔案時,會用到的命令就準備好了。
手動轉換模型檔案為GGUF格式
如果下載的是生成好的gguf模型就不需要手動轉換了。為啥要這個格式。這個格式的LLAMA.cpp才認。其它格式的資料不認。
1、下載 Llama 2 模型
首先,從 Hugging Face https://huggingface.co/meta-llama 上下載你想要使用的 Llama 2 模型,比如 7B-Chat,我的Mac是8G記憶體,M2晶片,估計也只能跑到這個模型,再大的機器跑不動。
值得一提的是:https://huggingface.co/meta-llama/Llama-2-7b-chat 下載時,第一次需要授權,需要到meta官網,下面這個連結
https://llama.meta.com/llama-downloads
去提交一下郵件。這裡選國家時會有意想不到的結果,自己思考一下。
如果要體驗英文原版,就用上面的,會比較麻煩,但是對英文的回覆比較好。
參考教程 https://github.com/ymcui/Chinese-LLaMA-Alpaca-2/wiki/manual_conversion_zh
如果要使用中文語料庫,需要先合併為原始模型和中文的模型,再生成bin,再去轉換為gguf格式。喜歡折騰的可以試試。
如果要使用我這個中文混合模型,可以直接下載gguf格式。下面這幾步都不用了。省事多了。
下載地址:https://huggingface.co/hfl/chinese-llama-2-7b-gguf/tree/main
記得選ggml-model-q4_0.gguf這個模型。
2、下載 llama.cpp 庫,並按上面的流程進行編譯安裝成功
3、轉換模型格式
然後,你需要把模型的檔案轉換成 GGUF 格式,使用 llama.cpp 庫中的 convert.py 指令碼來完成。轉換時需要指定模型的路徑和上下文長度(模型可以處理的最大的文字長度),不同的模型可能有不同的上下文長度。
如果模型是 LLaMA v1,則使用 --ctx 2048,如果你的模型是 LLaMA v2,則使用 --ctx 4096。這裡使用 --ctx 4096。如下所示:
# 轉換模型檔案
python3 convert.py models/7B-Chat --ctx 4096
如果安裝過程缺python包直接pip install 安裝即可。
4、量化模型檔案
使用 llama.cpp 庫中的 quantize 程式來進行模型量化,使用 quantize 命令:
# 執行 quantize 程式,指定輸入和輸出的模型檔案和量化方式
./quantize ./models/7B/ggml-model-f16.gguf ./models/7B/ggml-model-q4_0.gguf q4_0
這樣,在 7B-Chat 資料夾中就生成一個 4 位整數的 GGUF 模型檔案。
5、執行模型
./main -m ./models/7B/ggml-model-q4_0.bin \
-t 8 \
-n 128 \
-p 'The first president of the USA was '
# run the inference 推理
./main -m ./models/llama-2-7b-hf/ggml-model-q4_0.bin -n 128
#以互動式對話
./main -m ./models/llama-2-7b-hf/ggml-model-q4_0.bin --color -f prompts/alpaca.txt -ins -c 2048 --temp 0.2 -n 256 --repeat_penalty 1.3
#chat with bob
./main -m ./models/llama-2-7b-hf/ggml-model-q4_0.bin -n 256 --repeat_penalty 1.0 --color -i -r "User:" -f prompts/chat-with-bob.txt
此步驟過於煩鎖,主要是模型檔案佔了幾十GB。所以我直接下載別人的中文模型進行使用。不需要再手動進行轉換、量化等操作。
以WebServer形式啟動
呼叫手冊:https://github.com/ggerganov/llama.cpp/blob/master/examples/server/README.md
用WebServer形式。可以對接到別的系統裡面,像FastGPT或者一些介面上,就可以無縫使用了。
1、啟動server 引數請./server -h 檢視,或者參考手冊
./server --host 0.0.0.0 -m /Users/kyle/MyCodeEnv/models/ggml-model-q4_0.gguf -c 4096 --n-gpu-layers 1
預設會開到8080埠上,配置可改。不加gpu-layers走CPU,會報錯。設個1就行
2、用CURL進行測試
curl --request POST \
--url http://127.0.0.1:8080/completion \
--header "Content-Type: application/json" \
--data '{"prompt": "給我講個冷笑話:","n_predict": 128}'
3、效果如圖
感覺 就是訓練的還是量少,有些問題會胡說。理解不了的問題反應會非常慢。會花很長的時間。
Python呼叫介面庫
https://github.com/abetlen/llama-cpp-python
https://llama-cpp-python.readthedocs.io/en/latest/install/macos/
1、Mac使用者,pip編譯,最簡
安裝llama-cpp-python (with Metal support)
為了啟用對於Metal (Apple的GPU加速框架) 的支援,使用以下命令安裝llama-cpp-python:
CMAKE_ARGS="-DLLAMA_METAL=on" FORCE_CMAKE=1 pip install llama-cpp-python
2、程式碼中使用,安裝好之後可以直接用requests呼叫。無需第1步的llama-cpp-python依賴包。使用通用的ChatGPT的問答形式回答。
也可以不經Server直接呼叫模型檔案
# -*- coding: utf-8 -*-
import requests
url = 'http://localhost:8080/v1/chat/completions'
headers = {
'accept': 'application/json',
'Content-Type': 'application/json'
}
dataEn = {
'messages': [
{
'content': 'You are a helpful assistant.',
'role': 'system'
},
{
'content': 'What is the capital of France?',
'role': 'user'
}
]
}
data = {
'messages': [
{
'content': '你是一個樂於助人的助手',
'role': 'system'
},
{
'content': '二戰是哪一年爆發的?',
'role': 'user'
}
]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
print(response.json()['choices'][0]['message']['content'])
3、直接呼叫模型檔案,需要安裝llama-cpp-python包
# -*- coding: utf-8 -*-
from llama_cpp import Llama
# 加截模型
# llm = Llama(model_path='/Users/kyle/MyCodeEnv/models/ggml-model-q4_0.gguf', chat_format="llama-2") # 可以指定聊天格式
llm = Llama(model_path='/Users/kyle/MyCodeEnv/models/ggml-model-q4_0.gguf')
# 提問
response = llm("給我講一下英國建國多少年了", max_tokens=320, echo=True)
# response = llm.create_chat_completion(
# messages=[
# {"role": "system", "content": "你是一個樂於助人的助手"},
# {
# "role": "user",
# "content": "給我講一個笑話"
# }
# ]
# )
# print(response)
# 回答
print(response['choices'][0])
最後貼個官方的教程
https://llama-cpp-python.readthedocs.io/en/latest/install/macos/
再慢慢研究研究微調和訓練自己的語料吧。
跟上LLM的步伐。不接觸AI就要落後了。
更多精彩內容,請關注我的公眾號:青塬科技。