Einfaches Befehlszeilen-Chat-Programm für GPT-J-, LLaMA- und MPT-Modelle, geschrieben in C++. Basierend auf llama.cpp und verwendet gpt4all-backend für vollständige Kompatibilität.
Warnung: Sehr früher Fortschritt, möglicherweise Fehler
Da das Programm mit C++ erstellt wurde, sollte es auf den meisten Linux-, MacOS- und Windows-Systemen erstellt und ausgeführt werden können. Der Link „Releases“ enthält vorgefertigte Binärdateien. AVX2 ist schneller und funktioniert auf den meisten neueren Computern. Wenn Sie das Programm ausführen, prüft und druckt es, ob Ihr Computer AVX2-Unterstützung bietet.
git clone --recurse-submodules https://github.com/kuvaus/LlamaGPTJ-chat
cd LlamaGPTJ-chat
Sie müssen auch eine Modelldatei herunterladen. Einzelheiten und Links finden Sie unter den unterstützten Modellen.
Da das Programm mit C++ erstellt wurde, sollte es auf den meisten Linux-, MacOS- und Windows-Systemen erstellt und ausgeführt werden können. Auf den meisten Systemen benötigen Sie zum Erstellen nur Folgendes:
mkdir build
cd build
cmake ..
cmake --build . --parallel
Notiz
Wenn Sie einen alten Prozessor haben, können Sie die AVX2-Anweisungen im Build-Schritt mit der Flagge
-DAVX2=OFF
ausschalten.Wenn Sie einen neuen Prozessor haben, können Sie die AVX512-Anweisungen im Build-Schritt mit der Flagge
-DAVX512=ON
einschalten.Legen Sie unter altem macOS
-DBUILD_UNIVERSAL=OFF
fest, um den Build nur x86 anstelle der universellen Intel/ARM64-Binärdatei zu erstellen. Setzen Sie unter wirklich altem macOS-DOLD_MACOS=ON
. Dadurch werden/save
und/load
deaktiviert, aber mit altem Xcode kompiliert.Unter Windows können Sie jetzt Visual Studio (MSVC) oder MinGW verwenden. Wenn Sie stattdessen MinGW erstellen möchten, legen Sie
-G "MinGW Makefiles"
fest.Unter ARM64 Linux gibt es keine vorgefertigten Binärdateien, aber Sie können es jetzt aus dem Quellcode erstellen.
Nach dem Kompilieren befindet sich die Binärdatei unter:
build/bin/chat
Es steht Ihnen jedoch frei, es überall hin zu bewegen. Einfacher Befehl für 4 Threads zum Starten:
./chat -m " /path/to/modelfile/ggml-vicuna-13b-1.1-q4_2.bin " -t 4
oder
./chat -m " /path/to/modelfile/ggml-gpt4all-j-v1.3-groovy.bin " -t 4
Viel Spaß beim Chatten!
Das aktuelle Backend unterstützt die Modelle GPT-J, LLaMA und MPT.
Sie müssen zuerst ein GPT-J-Modell herunterladen. Hier sind direkte Links zu den Modellen:
- Die Standardversion ist v1.0 : ggml-gpt4all-j.bin
- Zum Zeitpunkt des Schreibens ist die neueste Version 1.3-groovy : ggml-gpt4all-j-v1.3-groovy.bin
Sie sind jeweils etwa 3,8 GB groß. Das Chat-Programm speichert das Modell zur Laufzeit im RAM, sodass Sie zum Ausführen genügend Speicher benötigen. Weitere Informationen zu GPT-J-Modellen erhalten Sie unter gpt4all.io oder nomic-ai/gpt4all github.
Alternativ müssen Sie zunächst ein LLaMA-Modell herunterladen. Die Originalgewichte dienen Forschungszwecken und können hier beantragt werden. Nachfolgend finden Sie direkte Links zu abgeleiteten Modellen:
- Vicuna 7b v1.1 : ggml-vicuna-7b-1.1-q4_2.bin
- Vicuna 13b v1.1 : ggml-vicuna-13b-1.1-q4_2.bin
- GPT-4-All l13b-snoozy : ggml-gpt4all-l13b-snoozy.bin
Die LLaMA-Modelle sind recht groß: Die 7B-Parameterversionen sind etwa 4,2 GB und die 13B-Parameterversionen jeweils 8,2 GB groß. Das Chat-Programm speichert das Modell zur Laufzeit im RAM, sodass Sie zum Ausführen genügend Speicher benötigen. Weitere Informationen zu LLaMA-Modellen finden Sie im Whitepaper oder auf der META AI-Website.
Sie können stattdessen auch ein MPT-Modell herunterladen und verwenden. Hier sind direkte Links zu MPT-7B-Modellen:
- Von Mosaik ML vorab trainiertes MPT-7B-Basismodell: ggml-mpt-7b-base.bin
- Von Mosaik ML trainiertes MPT-7B-Instruktionsmodell: ggml-mpt-7b-instruct.bin
- Nichtkommerzielles MPT-7B-Chat-Modell, trainiert von Mosaic ML: ggml-mpt-7b-chat.bin
Sie sind jeweils etwa 4,9 GB groß. Das Chat-Programm speichert das Modell zur Laufzeit im RAM, sodass Sie zum Ausführen genügend Speicher benötigen. Weitere Informationen zu MPT-Modellen finden Sie auf der Website von MosaicML oder auf dem Github vonmosaicml/llm-foundry.
Sie können die Hilfe und die vollständige Parameterliste anzeigen mit: ./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)
Hier finden Sie einige praktische Funktionen und Details dazu, wie Sie diese mithilfe von Befehlszeilenoptionen erreichen.
Standardmäßig druckt das Programm den Chat auf der Standardausgabe (stdout). Wenn Sie das Programm also in Ihre App einbinden, muss es nur stdout lesen. Sie können das gesamte Chat-Protokoll auch mit der Option --save_log
in einer Textdatei speichern. Es gibt eine einfache Möglichkeit, sich an Ihre vergangene Konversation zu erinnern, indem Sie einfach das gespeicherte Chat-Protokoll mit der Option --load_log
laden, wenn Sie eine neue Sitzung starten.
Wenn das Programm nur einmal ohne Benutzerinteraktionen ausgeführt werden soll, besteht eine Möglichkeit darin, die Eingabeaufforderung mit -p "prompt"
festzulegen und die Flags --no-interactive
und --no-animation
zu verwenden. Das Programm liest die Eingabeaufforderung, druckt die Antwort aus und schließt sich.
Wenn Sie eine Persönlichkeit für Ihre KI wünschen, können Sie prompt_template_sample.txt
ändern und --load_template
verwenden, um die geänderte Datei zu laden. Die einzige Konstante ist, dass Ihre Eingaben während des Chats in der Zeile %1
abgelegt werden. Anweisungen, Aufforderung, Antwort und alles andere können beliebig ersetzt werden. Mit unterschiedlichen personality_template.txt
Dateien können Sie auf einfache Weise verschiedene KI-Charaktere hinzufügen. Bei einigen Modellen kann die Angabe von KI- und Benutzernamen anstelle von Prompt:
und Response:
dazu führen, dass die Konversation natürlicher verläuft, da die KI versucht, eine Konversation zwischen zwei Personen nachzuahmen.
Sie können den Chat jederzeit während des Chats zurücksetzen, indem Sie /reset
in das Eingabefeld eingeben. Dadurch wird der Speicher der KI von vergangenen Gesprächen, Protokollen und Tokens gelöscht. Anschließend können Sie den Chat von Grund auf starten, ohne das gesamte Modell erneut laden zu müssen.
Sie können Parameter auch aus einer JSON-Datei mit dem Flag --load_json "/path/to/file.json"
abrufen. Verschiedene Modelle können mit unterschiedlichen Eingabeparametern eine bessere oder schlechtere Leistung erbringen. Daher ist die Verwendung von JSON-Dateien eine praktische Möglichkeit, alle Einstellungen auf einmal zu speichern und zu laden. Der JSON-Dateilader ist einfach konzipiert, um externe Abhängigkeiten zu verhindern. Aus diesem Grund muss die JSON-Datei einem bestimmten Format entsprechen. Hier ist ein einfaches Beispiel:
{ "top_p" : 1.0 , "top_k" : 50400 , "temp" : 0.9 , "n_batch" : 9 }
Dies ist nützlich, wenn Sie verschiedene Temperatur- und Probenahmeeinstellungen speichern möchten.
Und noch etwas Ausführlicheres:
{
"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"
}
Dieser lädt die Eingabeaufforderung aus dem JSON, verwendet eine bestimmte Vorlage und führt das Programm einmal im nicht interaktiven Modus aus, sodass der Benutzer keine Eingaben tätigen muss.
Dieses Projekt ist unter der MIT-Lizenz lizenziert