J'ai commencé à travailler sur la réimplémentation de la bibliothèque ici : FastTensors
Veuillez le mettre en vedette si vous souhaitez voir une implémentation compatible GGML dans Pure Go.
Veuillez consulter mon projet connexe Booster
Nous rêvons d'un monde où d'autres hackers ML créent de VRAIMENT GROS modèles GPT dans leurs laboratoires personnels sans que les clusters GPU consomment des tonnes de $$$ .
Le code du projet est basé sur le légendaire framework ggml.cpp de Georgi Gerganov écrit en C++ avec la même attitude envers la performance et l'élégance.
Nous espérons que l’utilisation de Golang au lieu d’un langage si puissant mais de trop bas niveau permettra une adoption beaucoup plus large.
Tout d’abord, obtenez et convertissez vous-même les modèles LLaMA originaux, ou téléchargez simplement ceux prêts à l’emploi :
LLaMA-7B : lama-7b-fp32.bin
LLaMA-13B : lama-13b-fp32.bin
Les deux modèles stockent les poids FP32, vous aurez donc besoin d'au moins 32 Go de RAM (pas de VRAM ni de RAM GPU) pour LLaMA-7B. Doublez à 64 Go pour LLaMA-13B.
Ensuite, créez le binaire de l'application à partir des sources (voir les instructions ci-dessous), ou téléchargez-en simplement un déjà construit :
Windows : lama-go-v1.4.0.exe
MacOS : lama-go-v1.4.0-macos
Linux : lama-go-v1.4.0-linux
Alors maintenant que vous avez à la fois l’exécutable et le modèle, essayez-le par vous-même :
llama-go-v1.4.0-macos
--model ~ /models/llama-7b-fp32.bin
--prompt " Why Golang is so popular? "
--prompt Text prompt from user to feed the model input
--model Path and file name of converted .bin LLaMA model [ llama-7b-fp32.bin, etc ]
--server Start in Server Mode acting as REST API endpoint
--host Host to allow requests from in Server Mode [ localhost by default ]
--port Port listen to in Server Mode [ 8080 by default ]
--pods Maximum pods or units of parallel execution allowed in Server Mode [ 1 by default ]
--threads Adjust to the number of CPU cores you want to use [ all cores by default ]
--context Context size in tokens [ 1024 by default ]
--predict Number of tokens to predict [ 512 by default ]
--temp Model temperature hyper parameter [ 0.5 by default ]
--silent Hide welcome logo and other output [ shown by default ]
--chat Chat with user in interactive mode instead of compute over static prompt
--profile Profe CPU performance while running and store results to cpu.pprof file
--avx Enable x64 AVX2 optimizations for Intel and AMD machines
--neon Enable ARM NEON optimizations for Apple Macs and ARM server
LLaMA.go intègre un serveur HTTP autonome exposant l'API REST. Pour l'activer, exécutez l'application avec des indicateurs spéciaux :
llama-go-v1.4.0-macos
--model ~ /models/llama-7b-fp32.bin
--server
--host 127.0.0.1
--port 8080
--pods 4
--threads 4
En fonction de la taille du modèle, du nombre de cœurs de processeur disponibles, du nombre de requêtes que vous souhaitez traiter en parallèle, de la rapidité avec laquelle vous souhaitez obtenir des réponses, choisissez judicieusement les paramètres des pods et des threads .
Les pods sont un certain nombre d'instances d'inférence qui peuvent s'exécuter en parallèle.
Le paramètre Threads définit le nombre de cœurs qui seront utilisés pour les mathématiques tensorielles dans un pod.
Ainsi, par exemple, si vous disposez d'une machine dotée de 16 cœurs matériels capables d'exécuter 32 hyper-threads en parallèle, vous pourriez vous retrouver avec quelque chose comme ça :
--server --pods 4 --threads 8
Lorsqu'il n'y a pas de pod libre pour gérer la demande arrivant, il sera placé dans la file d'attente et démarré lorsqu'un pod aura terminé son travail.
Envoyez une requête POST (avec Postman) à l'adresse de votre serveur avec un JSON contenant un UUID v4 unique et une invite :
{
"id" : " 5fb8ebd0-e0c9-4759-8f7d-35590f6c9fc3 " ,
"prompt" : " Why Golang is so popular? "
}
Envoyez la requête GET (avec Postman ou un navigateur) à une URL telle que http://host:port/jobs/status/:id
GET http://localhost:8080/jobs/status/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
Envoyer la requête GET (avec Postman ou un navigateur) à une URL telle que http://host:port/jobs/:id
GET http://localhost:8080/jobs/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
Tout d’abord, installez Golang et git (vous devrez télécharger les programmes d’installation dans le cas de Windows).
brew install git
brew install golang
Clonez ensuite le dépôt et entrez dans le dossier du projet :
git clone https://github.com/gotzmann/llama.go.git
cd llama.go
Un peu de magie Go pour installer des dépendances externes :
go mod tidy
go mod vendor
Nous sommes maintenant prêts à construire le binaire à partir du code source :
go build -o llama-go-v1.exe -ldflags " -s -w " main.go
1) Où puis-je me procurer des modèles LLaMA originaux ?
Contactez Meta directement ou recherchez simplement des alternatives torrent.
2) Comment convertir les fichiers LLaMA originaux dans un format pris en charge ?
Placez les fichiers PyTorch FP16 originaux dans le répertoire models , puis convertissez-les avec la commande :
python3 ./scripts/convert.py ~ /models/LLaMA/7B/ 0