用 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 许可