Programme de discussion en ligne de commande simple pour les modèles GPT-J, LLaMA et MPT écrits en C++. Basé sur llama.cpp et utilise gpt4all-backend pour une compatibilité totale.
Avertissement Progrès très précoce, peut contenir des bugs
Étant donné que le programme est créé en C++, il doit être construit et exécuté sur la plupart des systèmes Linux, MacOS et Windows. Le lien Releases contient des binaires prêts à l’emploi. AVX2 est plus rapide et fonctionne sur la plupart des ordinateurs les plus récents. Si vous exécutez le programme, il vérifiera et imprimera si votre ordinateur prend en charge AVX2.
git clone --recurse-submodules https://github.com/kuvaus/LlamaGPTJ-chat
cd LlamaGPTJ-chat
Vous devez également télécharger un fichier de modèle. Consultez les modèles pris en charge pour plus de détails et de liens.
Étant donné que le programme est créé en C++, il doit être construit et exécuté sur la plupart des systèmes Linux, MacOS et Windows. Sur la plupart des systèmes, vous n'en avez besoin que pour construire :
mkdir build
cd build
cmake ..
cmake --build . --parallel
Note
Si vous disposez d'un ancien processeur, vous pouvez désactiver les instructions AVX2 lors de l'étape de construction avec l'indicateur
-DAVX2=OFF
.Si vous disposez d'un nouveau processeur, vous pouvez activer les instructions AVX512 lors de l'étape de construction avec l'indicateur
-DAVX512=ON
.Sur les anciens macOS, définissez
-DBUILD_UNIVERSAL=OFF
pour créer la version x86 uniquement au lieu du binaire universel Intel/ARM64. Sur un très ancien macOS, définissez-DOLD_MACOS=ON
. Cela désactive/save
et/load
mais compile sur l'ancien Xcode.Sous Windows, vous pouvez désormais utiliser Visual Studio (MSVC) ou MinGW. Si vous souhaitez plutôt construire MinGW, définissez
-G "MinGW Makefiles"
.Sous ARM64 Linux, il n'existe pas de binaires prêts à l'emploi, mais vous pouvez désormais les créer à partir des sources.
Après compilation, le binaire se trouve à l'emplacement :
build/bin/chat
Mais vous êtes libre de le déplacer n'importe où. Commande simple pour 4 threads pour commencer :
./chat -m " /path/to/modelfile/ggml-vicuna-13b-1.1-q4_2.bin " -t 4
ou
./chat -m " /path/to/modelfile/ggml-gpt4all-j-v1.3-groovy.bin " -t 4
Bonne discussion !
Le backend actuel prend en charge les modèles GPT-J, LLaMA et MPT.
Vous devez d'abord télécharger un modèle GPT-J. Voici des liens directs vers les modèles :
- La version par défaut est la v1.0 : ggml-gpt4all-j.bin
- Au moment de la rédaction, la plus récente est la version 1.3-groovy : ggml-gpt4all-j-v1.3-groovy.bin
Ils font environ 3,8 Go chacun. Le programme de discussion stocke le modèle dans la RAM lors de l'exécution, vous avez donc besoin de suffisamment de mémoire pour l'exécuter. Vous pouvez obtenir plus de détails sur les modèles GPT-J sur gpt4all.io ou nomic-ai/gpt4all github.
Alternativement, vous devez d'abord télécharger un modèle LLaMA. Les poids originaux sont destinés à des fins de recherche et vous pouvez demander à y accéder ici. Vous trouverez ci-dessous des liens directs vers des modèles dérivés :
- Vicogne 7b v1.1 : ggml-vicuna-7b-1.1-q4_2.bin
- Vigogne 13b v1.1 : ggml-vicuna-13b-1.1-q4_2.bin
- GPT-4-All l13b-snoozy : ggml-gpt4all-l13b-snoozy.bin
Les modèles LLaMA sont assez volumineux : les versions 7B avec paramètres font environ 4,2 Go et 13B avec 8,2 Go chacune. Le programme de discussion stocke le modèle dans la RAM lors de l'exécution, vous avez donc besoin de suffisamment de mémoire pour l'exécuter. Vous pouvez obtenir plus de détails sur les modèles LLaMA dans le livre blanc ou sur le site Web META AI.
Vous pouvez également télécharger et utiliser un modèle MPT à la place. Voici des liens directs vers les modèles MPT-7B :
- Modèle de base MPT-7B pré-entraîné par Mosaic ML : ggml-mpt-7b-base.bin
- Modèle d'instruction MPT-7B entraîné par Mosaic ML : ggml-mpt-7b-instruct.bin
- Modèle de discussion MPT-7B non commercial formé par Mosaic ML : ggml-mpt-7b-chat.bin
Ils font environ 4,9 Go chacun. Le programme de discussion stocke le modèle dans la RAM lors de l'exécution, vous avez donc besoin de suffisamment de mémoire pour l'exécuter. Vous pouvez obtenir plus de détails sur les modèles MPT sur le site Web MosaicML ou sur le github mosaïqueml/llm-foundry.
Vous pouvez consulter l'aide et la liste complète des paramètres avec : ./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)
Voici quelques fonctionnalités pratiques et des détails sur la façon de les réaliser à l'aide des options de ligne de commande.
Par défaut, le programme imprime le chat sur la sortie standard (stdout), donc si vous incluez le programme dans votre application, il lui suffit de lire la sortie standard. Vous pouvez également enregistrer l'intégralité du journal de discussion dans un fichier texte avec l'option --save_log
. Il existe un moyen élémentaire de se souvenir de votre conversation passée en chargeant simplement le journal de discussion enregistré avec l'option --load_log
lorsque vous démarrez une nouvelle session.
Si vous n'avez besoin que du programme pour s'exécuter une seule fois sans aucune interaction de l'utilisateur, une solution consiste à définir l'invite avec -p "prompt"
et à utiliser les indicateurs --no-interactive
et --no-animation
. Le programme lira l'invite, imprimera la réponse et se fermera.
Si vous souhaitez une personnalité pour votre IA, vous pouvez modifier prompt_template_sample.txt
et utiliser --load_template
pour charger le fichier modifié. La seule constante est que votre contribution pendant le chat sera placée sur la ligne %1
. Les instructions, les invites, les réponses et tout le reste peuvent être remplacés comme vous le souhaitez. Avoir différents fichiers personality_template.txt
est un moyen simple d'ajouter différents personnages IA. Avec certains modèles, donner à la fois les noms d'IA et d'utilisateur au lieu de Prompt:
et Response:
peut rendre la conversation plus naturelle lorsque l'IA tente d'imiter une conversation entre deux personnes.
Vous pouvez réinitialiser le chat à tout moment pendant le chat en tapant /reset
dans le champ de saisie. Cela effacera la mémoire de l'IA des conversations, logits et jetons passés. Vous pouvez ensuite démarrer le chat à partir d’une page vierge sans avoir à recharger à nouveau l’ensemble du modèle.
Vous pouvez également récupérer les paramètres d'un fichier json avec l'indicateur --load_json "/path/to/file.json"
. Différents modèles peuvent fonctionner mieux ou moins bien avec différents paramètres d'entrée. L'utilisation de fichiers JSON est donc un moyen pratique de stocker et de charger tous les paramètres en même temps. Le chargeur de fichiers JSON est conçu pour être simple afin d'éviter toute dépendance externe, et par conséquent, le fichier JSON doit suivre un format spécifique. Voici un exemple simple :
{ "top_p" : 1.0 , "top_k" : 50400 , "temp" : 0.9 , "n_batch" : 9 }
Ceci est utile lorsque vous souhaitez stocker différents paramètres de température et d’échantillonnage.
Et un plus détaillé :
{
"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"
}
Celui-ci charge l'invite à partir du json, utilise un modèle spécifique et exécute le programme une fois en mode non interactif afin que l'utilisateur n'ait à appuyer sur aucune entrée.
Ce projet est sous licence MIT