用 C++ 編寫的適用於 GPT-J、LLaMA 和 MPT 模型的簡單命令列聊天程式。基於 llama.cpp 並使用 gpt4all-backend 實現完全相容。
警告非常早期的進展,可能有錯誤
由於該程式是使用 C++ 編寫的,因此它應該在大多數 Linux、MacOS 和 Windows 系統上建置和運行。發布連結有現成的二進位。 AVX2 速度更快,適用於大多數較新的電腦。如果您運行該程序,它將檢查並列印您的電腦是否支援 AVX2。
git clone --recurse-submodules https://github.com/kuvaus/LlamaGPTJ-chat
cd LlamaGPTJ-chat
您還需要下載模型文件,請參閱支援的模型以獲取詳細資訊和連結。
由於該程式是使用 C++ 編寫的,因此它應該在大多數 Linux、MacOS 和 Windows 系統上建置和運行。在大多數系統上,您只需要建置:
mkdir build
cd build
cmake ..
cmake --build . --parallel
筆記
如果您有舊處理器,則可以在建置步驟中使用
-DAVX2=OFF
標誌關閉 AVX2 指令。如果您有新的處理器,則可以在建置步驟中使用
-DAVX512=ON
標誌開啟 AVX512 指令。在舊版 macOS 上,設定
-DBUILD_UNIVERSAL=OFF
以使建置僅 x86,而不是通用 Intel/ARM64 二進位。在非常舊的 macOS 上,設定-DOLD_MACOS=ON
。這會停用/save
和/load
但會在舊版 Xcode 上編譯。在 Windows 上,您現在可以使用 Visual Studio (MSVC) 或 MinGW。如果您想要建立 MinGW,請設定
-G "MinGW Makefiles"
。在 ARM64 Linux 上沒有現成的二進位文件,但您現在可以從原始程式碼建置它。
編譯後,二進位檔位於:
build/bin/chat
但您可以自由地將其移動到任何地方。啟動 4 個執行緒的簡單指令:
./chat -m " /path/to/modelfile/ggml-vicuna-13b-1.1-q4_2.bin " -t 4
或者
./chat -m " /path/to/modelfile/ggml-gpt4all-j-v1.3-groovy.bin " -t 4
聊天愉快!
目前後端支援 GPT-J、LLaMA 和 MPT 模型。
您需要先下載 GPT-J 模型。以下是模型的直接連結:
- 預設版本是v1.0 :ggml-gpt4all-j.bin
- 在撰寫本文時,最新版本是1.3-groovy :ggml-gpt4all-j-v1.3-groovy.bin
它們每個大約 3.8 GB。聊天程式在運行時將模型儲存在 RAM 中,因此您需要足夠的記憶體才能運行。您可以從 gpt4all.io 或 nomic-ai/gpt4all github 獲取有關 GPT-J 模型的更多詳細資訊。
或者,您需要先下載 LLaMA 模型。原始權重用於研究目的,您可以在此處申請訪問。以下是派生模型的直接連結:
- 駱駝毛 7b v1.1 : ggml-vicuna-7b-1.1-q4_2.bin
- 駱駝毛 13b v1.1 : ggml-vicuna-13b-1.1-q4_2.bin
- GPT-4-所有l13b-snoozy : ggml-gpt4all-l13b-snoozy.bin
LLaMA 模型相當大:7B 參數版本約 4.2 Gb,13B 參數版本各為 8.2 Gb。聊天程式在運行時將模型儲存在 RAM 中,因此您需要足夠的記憶體才能運行。您可以從白皮書或 META AI 網站獲取有關 LLaMA 模型的更多詳細資訊。
您也可以下載並使用 MPT 模型。以下是 MPT-7B 型號的直接連結:
- Mosaic ML 預訓練的 MPT-7B 基礎模型:ggml-mpt-7b-base.bin
- 由 Mosaic ML 訓練的 MPT-7B 指令模型:ggml-mpt-7b-instruct.bin
- 由 Mosaic ML 訓練的非商業 MPT-7B 聊天模式:ggml-mpt-7b-chat.bin
它們每個大約 4.9 GB。聊天程式在運行時將模型儲存在 RAM 中,因此您需要足夠的記憶體才能運行。您可以從 MosaicML 網站或 horsesml/llm-foundry github 獲取有關 MPT 模型的更多詳細資訊。
您可以使用以下命令查看幫助和完整參數列表: ./chat -h
usage: ./bin/chat [options]
A simple chat program for GPT-J, LLaMA, and MPT models.
You can set specific initial prompt with the -p flag.
Runs default in interactive and continuous mode.
Type ' /reset ' to reset the chat context.
Type ' /save ' , ' /load ' to save network state into a binary file.
Type ' /save NAME ' , ' /load NAME ' to rename saves. Default: --save_name NAME.
Type ' /help ' to show this help dialog.
Type ' quit ' , ' exit ' or, ' Ctrl+C ' to quit.
options:
-h, --help show this help message and exit
-v, --version show version and license information
--run-once disable continuous mode
--no-interactive disable interactive mode altogether (uses given prompt only)
--no-animation disable chat animation
--no-saves disable ' /save ' , ' /load ' functionality
-s SEED, --seed SEED RNG seed for --random-prompt (default: -1)
-t N, --threads N number of threads to use during computation (default: 4)
-p PROMPT, --prompt PROMPT
prompt to start generation with (default: empty)
--random-prompt start with a randomized prompt.
-n N, --n_predict N number of tokens to predict (default: 200)
--top_k N top-k sampling (default: 40)
--top_p N top-p sampling (default: 0.9)
--temp N temperature (default: 0.9)
--n_ctx N number of tokens in context window (default: 0)
-b N, --batch_size N batch size for prompt processing (default: 20)
--repeat_penalty N repeat_penalty (default: 1.1)
--repeat_last_n N last n tokens to penalize (default: 64)
--context_erase N percent of context to erase (default: 0.8)
--b_token optional beginning wrap token for response (default: empty)
--e_token optional end wrap token for response (default: empty)
-j, --load_json FNAME
load options instead from json at FNAME (default: empty/no)
--load_template FNAME
load prompt template from a txt file at FNAME (default: empty/no)
--save_log FNAME
save chat log to a file at FNAME (default: empty/no)
--load_log FNAME
load chat log from a file at FNAME (default: empty/no)
--save_dir DIR
directory for saves (default: ./saves)
--save_name NAME
save/load model state binary at save_dir/NAME.bin (current: model_state)
context is saved to save_dir/NAME.ctx (current: model_state)
-m FNAME, --model FNAME
model path (current: ./models/ggml-vicuna-13b-1.1-q4_2.bin)
以下是一些方便的功能以及有關如何使用命令列選項實現這些功能的詳細資訊。
預設情況下,程式會將聊天內容列印到標準(stdout)輸出,因此如果您將程式包含到您的應用程式中,它只需要讀取 stdout。您也可以使用--save_log
選項將整個聊天日誌儲存到文字檔案中。有一個基本方法可以記住您過去的對話,只需在開始新會話時使用--load_log
選項載入已儲存的聊天日誌即可。
如果您只需要程式運行一次而不需要任何使用者交互,一種方法是使用-p "prompt"
設定提示並使用--no-interactive
和--no-animation
標誌。程式將讀取提示,列印答案,然後關閉。
如果你想要你的AI有個性,你可以更改prompt_template_sample.txt
並使用--load_template
載入修改後的檔案。唯一不變的是您在聊天期間的輸入將放在%1
行上。指示、提示、回應以及其他所有內容都可以按照您想要的方式進行替換。擁有不同的personality_template.txt
檔案是新增不同AI 角色的簡單方法。對於某些模型,提供 AI 和使用者名稱而不是Prompt:
和Response:
,可以使對話更加自然,因為 AI 試圖模仿兩個人之間的對話。
您可以在聊天過程中隨時透過在輸入欄位中鍵入/reset
來重置聊天。這將清除人工智慧對過去對話、邏輯和令牌的記憶。然後,您可以從空白開始聊天,而無需再次重新載入整個模型。
您也可以使用--load_json "/path/to/file.json"
標誌從 json 檔案中取得參數。不同的模型使用不同的輸入參數可能會表現得更好或更差,因此使用 json 檔案是一次儲存和載入所有設定的便捷方法。 JSON 檔案載入器被設計得很簡單,以防止任何外部依賴,因此 JSON 檔案必須遵循特定的格式。這是一個簡單的例子:
{ "top_p" : 1.0 , "top_k" : 50400 , "temp" : 0.9 , "n_batch" : 9 }
當您想要儲存不同的溫度和採樣設定時,這非常有用。
還有更詳細的:
{
"top_p" : 1.0 ,
"top_k" : 50400 ,
"temp" : 0.9 ,
"n_batch" : 20 ,
"threads" : 12 ,
"prompt" : "Once upon a time" ,
"load_template" : "/path/to/prompt_template_sample.txt" ,
"model" : "/path/to/ggml-gpt4all-j-v1.3-groovy.bin" ,
"no-interactive" : "true"
}
這個從 json 加載提示,使用特定模板,並在非交互模式下運行一次程序,因此用戶不必按任何輸入。
該專案已獲得 MIT 許可