Torchchat est une petite base de code présentant la possibilité d'exécuter de grands modèles de langage (LLMS) de manière transparente. Avec Torchchat, vous pouvez exécuter des LLM à l'aide de Python, dans votre propre application (C / C ++) (bureau ou serveur) et sur iOS et Android.
Important
Mise à jour du 25 septembre 2024: Torchchat a une prise en charge multimodale pour LLAMA3.2 11b !!
Pour l'essayer, terminez la section d'installation ci-dessous, puis montez vers notre guide multimodal pour en savoir plus.
Les modèles suivants sont soutenus par Torchchat et ont des alias associés.
| Modèle | Adapté aux mobiles | Notes |
|---|---|---|
| méta-llama / méta-llama-3.2-3b-instruit | ✅ | Réglé pour chat . Alias à llama3.2-3b . |
| méta-llama / méta-llama-3.2-3b | ✅ | Meilleur pour generate . Alias à llama3.2-3b-base . |
| méta-llama / lama-garde-3-1b | ✅ | Réglé pour la classification. Alias à llama3-1b-guard . |
| méta-llama / méta-llama-3.2-1b-instruit | ✅ | Réglé pour chat . Alias à llama3.2-1b . |
| méta-llama / méta-llama-3.2-1b | ✅ | Meilleur pour generate . Alias à llama3.2-1b-base . |
| méta-llama / lama-3.2-11b-vision-Instruct | Multimodal (image + texte). Réglé pour chat . Alias à llama3.2-11B . | |
| méta-llama / lama-3.2-11b-vision | Multimodal (image + texte). Réglé pour generate . Alias à llama3.2-11B-base . | |
| méta-llama / méta-llama-3.1-8b-instruit | ✅ | Réglé pour chat . Alias à llama3.1 . |
| méta-llama / méta-llama-3.1-8b | ✅ | Meilleur pour generate . Alias à llama3.1-base . |
| méta-llama / méta-llama-3-8b-instruit | ✅ | Réglé pour chat . Alias à llama3 . |
| méta-llama / méta-llama-3-8b | ✅ | Meilleur pour generate . Alias à llama3-base . |
| méta-llama / lama-2-7b-chat-hf | ✅ | Réglé pour chat . Alias à llama2 . |
| méta-llama / lama-2-13b-chat-hf | Réglé pour chat . Alias à llama2-13b-chat . | |
| méta-llama / lama-2-70b-chat-hf | Réglé pour chat . Alias à llama2-70b-chat . | |
| méta-llama / lama-2-7b-hf | ✅ | Meilleur pour generate . Alias à llama2-base . |
| méta-llama / codella-7b-python-hf | ✅ | Réglé pour Python et generate . Alias à codellama . |
| méta-llama / codella-34b-python-hf | ✅ | Réglé pour Python et generate . Alias à codellama-34b . |
| Mistralai / Mistral-7B-V0.1 | ✅ | Meilleur pour generate . Alias à mistral-7b-v01-base . |
| Mistralai / Mistral-7B-Instruct-V0.1 | ✅ | Réglé pour chat . Alias à mistral-7b-v01-instruct . |
| Mistralai / Mistral-7B-Instruct-V0.2 | ✅ | Réglé pour chat . Alias à mistral . |
| tinyllamas / histoires15m | ✅ | Modèle de jouets à generate . Alias aux stories15M . |
| tinyllamas / histoires42m | ✅ | Modèle de jouets à generate . Alias aux stories42M . |
| tinyllamas / histoires110m | ✅ | Modèle de jouets à generate . Alias aux stories110M . |
| openlm-research / open_llama_7b | ✅ | Meilleur pour generate . Alias à open-llama . |
Les étapes suivantes nécessitent que Python 3.10 soit installé.
Conseil
Torchchat utilise les derniers changements de divers projets Pytorch, il est donc fortement recommandé d'utiliser un VENV (en utilisant les commandes ci-dessous) ou Conda.
git clone https://github.com/pytorch/torchchat.git
cd torchchat
python3 -m venv .venv
source .venv/bin/activate
./install/install_requirements.shLes interfaces de Torchchat sont exploitées via des commandes Python et des coureurs natifs . Bien que les commandes Python soient énumérables dans le menu - help, ces derniers sont explorés dans leurs sections respectives.
python3 torchchat.py --help # Output
usage: torchchat [-h] {chat,browser,generate,export,eval,download,list,remove,where,server} ...
positional arguments:
{chat,browser,generate,export,eval,download,list,remove,where,server}
The specific command to run
chat Chat interactively with a model via the CLI
generate Generate responses from a model given a prompt
browser Chat interactively with a model in a locally hosted browser
export Export a model artifact to AOT Inductor or ExecuTorch
download Download model artifacts
list List all supported models
remove Remove downloaded model artifacts
where Return directory containing downloaded model artifacts
server [WIP] Starts a locally hosted REST server for model interaction
eval Evaluate a model via lm-eval
options:
-h, --help show this help message and exitInférence Python (chat, générer, navigateur, serveur)
Exportation (exportation)
Gestion des stocks (télécharger, liste, supprimer, où)
Évaluation (EVAL)
La plupart des modèles utilisent le visage étreint comme canal de distribution, vous devrez donc créer un compte de visage étreint. Créez un jeton d'accès utilisateur à face étreinte comme documenté ici avec le rôle write .
Connectez-vous à un visage étreint:
huggingface-cli login
Jetez un œil aux modèles disponibles:
python3 torchchat.py listPuis téléchargez-en un pour les tests (ce Readme utilise LLAMA3.1)
python3 torchchat.py download llama3.1
Note
Cette commande peut vous inviter à demander l'accès à Llama 3 via un visage étreint, si vous n'avez pas déjà accès. Suivez simplement les invites et ré-dirigez la commande lorsque l'accès est accordé. *
Cette sous-commande montre l'emplacement d'un modèle particulier.
python3 torchchat.py where llama3.1Ceci est utile dans les scripts lorsque vous ne voulez pas de chemins de code dur
Cette sous-commande supprime le modèle spécifié
python3 torchchat.py remove llama3.1 Plus d'informations sur ces commandes peuvent être trouvées en ajoutant l'option --help .
Le moyen le plus simple d'exécuter un modèle dans Pytorch est via une exécution impatient. Il s'agit du mode d'exécution par défaut pour Pytorch et Torchchat. Il effectue l'inférence sans créer des artefacts exportants ou en utilisant un coureur séparé.
Le modèle utilisé pour l'inférence peut également être configuré et adapté à des besoins spécifiques (compilation, quantification, etc.). Voir le guide de personnalisation pour les options prises en charge par Torchchat.
Conseil
Pour plus d'informations sur ces commandes, veuillez vous référer au menu --help .
Ce mode vous permet de discuter avec un LLM de manière interactive.
python3 torchchat.py chat llama3.1Ce mode génère du texte basé sur une invite d'entrée.
python3 torchchat.py generate llama3.1 --prompt " write me a story about a boy and his bear "Ce mode expose une API REST pour interagir avec un modèle. Le serveur suit la spécification de l'API OpenAI pour les compléments de chat.
Pour tester l'API REST, vous aurez besoin de 2 terminaux : un pour héberger le serveur et un pour envoyer la demande. Dans un terminal, démarrez le serveur
python3 torchchat.py server llama3.1Shell par défaut: python3 torchchat.py server llama3.1 & server_pid = $! ; Sleep 90 # Attendez que le serveur soit prêt à accepter les demandes
Dans un autre terminal, interrogez le serveur à l'aide curl . Selon la configuration du modèle, cette requête peut prendre quelques minutes pour répondre.
Note
Étant donné que cette fonctionnalité est en cours de développement actif, tous les paramètres ne sont pas consommés. Voir api / api.py pour plus de détails sur les paramètres de demande implémentés. Si vous rencontrez des problèmes, veuillez commenter le problème de suivi GitHub.
Le réglage stream sur "True" dans la demande émet une réponse dans des morceaux. Si stream n'est pas défini ou non "vrai", le client attendra la réponse complète du serveur.
Exemple d'entrée + sortie
curl http://127.0.0.1:5000/v1/chat/completions
-H "Content-Type: application/json"
-d '{
"model": "llama3.1",
"stream": "true",
"max_tokens": 200,
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
{"response":" I'm a software developer with a passion for building innovative and user-friendly applications. I have experience in developing web and mobile applications using various technologies such as Java, Python, and JavaScript. I'm always looking for new challenges and opportunities to learn and grow as a developer.nnIn my free time, I enjoy reading books on computer science and programming, as well as experimenting with new technologies and techniques. I'm also interested in machine learning and artificial intelligence, and I'm always looking for ways to apply these concepts to real-world problems.nnI'm excited to be a part of the developer community and to have the opportunity to share my knowledge and experience with others. I'm always happy to help with any questions or problems you may have, and I'm looking forward to learning from you as well.nnThank you for visiting my profile! I hope you find my information helpful and interesting. If you have any questions or would like to discuss any topics, please feel free to reach out to me. I"}
Shell par défaut: Kill $ {server_pid}
Cette commande ouvre une interface de navigateur de base pour le chat local en interrogeant un serveur local.
Tout d'abord, suivez les étapes de la section du serveur ci-dessus pour démarrer un serveur local. Ensuite, dans un autre terminal, lancez l'interface. L'exécution ce qui suit ouvrira un onglet dans votre navigateur.
streamlit run torchchat/usages/browser.py
Utilisez le curseur "Tokens de réponse maximum" pour limiter le nombre maximal de jetons générés par le modèle pour chaque réponse. Cliquez sur le bouton "Réinitialiser le chat" pour supprimer l'historique des messages et démarrer un nouveau chat.
AOTI compile les modèles avant l'exécution pour une inférence plus rapide. Le processus crée un fichier PT2 zippé contenant tous les artefacts générés par Aoductor, et un fichier .so avec le contenu Runnable qui est ensuite chargé pour l'inférence. Cela peut être fait avec les environs Python et C ++.
L'exemple suivant exporte et exécute le modèle d'instruct LLAMA3.1 8b. La première commande compile et effectue l'exportation réelle.
python3 torchchat.py export llama3.1 --output-aoti-package-path exportedModels/llama3_1_artifacts.pt2Note
Si votre machine a CUDA, ajoutez ce drapeau pour Performance --quantize torchchat/quant_config/cuda.json lors de l'exportation.
Pour plus de détails sur la quantification et les paramètres à utiliser pour votre cas d'utilisation, visitez notre guide de personnalisation.
Pour s'exécuter dans un environnement Python, utilisez la sous-commande générée comme avant, mais incluez le fichier PT2.
python3 torchchat.py generate llama3.1 --aoti-package-path exportedModels/llama3_1_artifacts.pt2 --prompt " Hello my name is "Pour fonctionner dans un environnement C ++, nous devons construire le binaire du coureur.
torchchat/utils/scripts/build_native.sh aotiEnsuite, exécutez l'exécutable compilé, avec le PT2.
cmake-out/aoti_run exportedModels/llama3_1_artifacts.pt2 -z ` python3 torchchat.py where llama3.1 ` /tokenizer.model -l 3 -i " Once upon a time " Executorch vous permet d'optimiser votre modèle d'exécution sur un appareil mobile ou intégré.
Avant d'exécuter des commandes dans TorchChat qui nécessitent EXICHACTORCH, vous devez d'abord installer Executorch.
Pour installer Executorch, exécutez les commandes suivantes. Cela téléchargera le référentiel Executorch sur ./et-build/src et installera diverses bibliothèques Executorch sur ./et-build/install.
Important
Les commandes suivantes doivent être exécutées à partir du répertoire racine Torchchat.
export TORCHCHAT_ROOT=${PWD}
./torchchat/utils/scripts/install_et.sh
Semblable à AOTI, pour se déployer sur l'appareil, nous exportons d'abord l'artefact PTE, puis nous chargeons l'artefact pour l'inférence.
L'exemple suivant utilise le modèle d'instruction LLAMA3.1 8B.
# Export
python3 torchchat.py export llama3.1 --quantize torchchat/quant_config/mobile.json --output-pte-path llama3.1.pte
Note
Nous utilisons --quantize torchchat/quant_config/mobile.json pour quantifier le modèle LLAMA3.1 pour réduire la taille du modèle et améliorer les performances pour les cas d'utilisation à disque.
Pour plus de détails sur la quantification et les paramètres à utiliser pour votre cas d'utilisation, visitez notre guide de personnalisation.
Bien que Executorch ne se concentre pas sur l'inférence du bureau, il est capable de le faire. Ceci est pratique pour tester les modèles PTE sans les envoyer à un appareil physique.
Plus précisément, il existe 2 façons de le faire: Pure Python et via un coureur
# Execute
python3 torchchat.py generate llama3.1 --pte-path llama3.1.pte --prompt "Hello my name is"
Construire le coureur
torchchat/utils/scripts/build_native.sh etExécuter à l'aide du coureur
cmake-out/et_run llama3.1.pte -z ` python3 torchchat.py where llama3.1 ` /tokenizer.model -l 3 -i " Once upon a time "Ce qui suit suppose que vous avez terminé les étapes de configuration de l'exécutif.
.dmg et déplacez le dossier CMake App to /Applications .sudo /Applications/CMake.app/Contents/bin/cmake-gui --installincreased-memory-limit . Ouvrez le projet Xcode:
open et-build/src/executorch/examples/demo-apps/apple_ios/LLaMA/LLaMA.xcodeprojRemarque: Si vous rencontrez des problèmes liés aux dépendances du package, fermez Xcode, nettoyez certains des caches et / ou les produits de construction et ouvrez à nouveau le projet Xcode:
rm -rf ~ /Library/org.swift.swiftpm ~ /Library/Caches/org.swift.swiftpm ~ /Library/Caches/com.apple.dt.Xcode ~ /Library/Developer/Xcode/DerivedData
Cliquez sur le bouton de lecture pour lancer l'application dans le simulateur.
Pour fonctionner sur un appareil, assurez-vous de le faire configurer pour le développement et un profil d'approvisionnement avec le droit de increased-memory-limit . Mettez à jour l'identifiant du bundle de l'application pour correspondre à votre profil d'approvisionnement avec la capacité requise.
Après avoir lancé avec succès l'application, copiez les fichiers Exécutorch Model ( .pte ) et Tokenizer ( .model ) exportés dans le dossier illama. Vous pouvez trouver le fichier modèle appelé llama3.1.pte dans le répertoire torchchat actuel et le fichier tokenizer à $(python3 torchchat.py where llama3.1)/tokenizer.model path.
On My iPhone > iLLaMA .Suivez les directives d'interface utilisateur de l'application pour sélectionner le modèle et les fichiers de tokenzer dans le système de fichiers local et émettre une invite.
Cliquez sur l'image ci-dessous pour le voir en action!
Ce qui suit suppose que vous avez terminé les étapes de configuration de l'exécutif.
Téléchargez le fichier AAR, qui contient la bibliothèque Java et la bibliothèque JNI correspondante, pour créer et exécuter l'application.
Déplacez le fichier AAR téléchargé vers torchchat/edge/android/torchchat/app/libs/ . Vous devrez peut-être créer le répertoire torchchat/edge/android/torchchat/app/libs/ s'il n'existe pas.
Poussez le fichier modèle et tokenizer sur votre appareil. Vous pouvez trouver le fichier modèle appelé llama3.1.pte dans le répertoire torchchat actuel et le fichier tokenizer à $(python3 torchchat.py where llama3.1)/tokenizer.model path.
adb shell mkdir -p /data/local/tmp/llama
adb push <model.pte> /data/local/tmp/llama
adb push <tokenizer.model or tokenizer.bin> /data/local/tmp/llama
Utilisez Android Studio pour ouvrir le squelette de l'application Torchchat, situé à torchchat/edge/android/torchchat .
Cliquez sur le bouton de lecture (^ R) pour le lancer dans l'émulateur / appareil.
Suivez les directives d'interface utilisateur de l'application pour choisir le modèle et les fichiers de tokenizer à partir du système de fichiers local. Puis émettez une invite.
Remarque: Le fichier AAR répertorié à l'étape 1 a le tokenizer Tiktoken et Sensese. Pour modifier ou utiliser un tokenizer personnalisé et l'exécution, modifiez le code EXICTORCH et utilisez ce script pour créer la bibliothèque AAR.
Alternativement, vous pouvez exécuter torchchat/utils/scripts/android_example.sh qui configure Java, Android SDK Manager, Android SDK, Android Emulat (si aucun appareil physique n'est trouvé), construit l'application et le lance pour vous. Il peut être utilisé si vous n'avez pas d'interface graphique.
export TORCHCHAT_ROOT=$(pwd)
sh torchchat/utils/scripts/android_example.sh
Remarque: cette fonctionnalité est toujours un travail en cours et toutes les fonctionnalités ne fonctionnent pas
Utilise la bibliothèque LM_Eval pour évaluer la précision du modèle sur une variété de tâches. Les défauts par défaut Wikitext et peuvent être contrôlés manuellement à l'aide des tâches et limiter les args. Voir l'évaluation
Exemples
Mode avide:
python3 torchchat.py eval llama3.1 --dtype fp32 --limit 5
Pour tester la perplexité pour un modèle abaissé ou quantifié, passez-le de la même manière que vous pourriez générer:
python3 torchchat.py eval llama3.1 --pte-path llama3.1.pte --limit 5
Torchchat incarne les détails de la philosophie de conception de Pytorch, en particulier "l'utilisabilité sur tout le reste".
Torchchat est une bibliothèque de pytorch native. Bien que nous fournissions des intégrations avec l'écosystème environnant (par exemple: modèles de visage étreintes, etc.), toutes les fonctionnalités de base sont écrites en pytorch.
Torchchat est conçu pour être facile à comprendre, à utiliser et à étendre.
Torchchat fournit des composants bien testés avec une barre élevée sur l'exactitude. Nous fournissons
Nous apprécions vraiment notre communauté et les contributions faites par nos merveilleux utilisateurs. Nous utiliserons cette section pour appeler certaines de ces contributions! Si vous souhaitez également vous aider, veuillez consulter le guide de contribution.
Pour vous connecter avec nous et d'autres membres de la communauté, nous vous invitons à rejoindre notre communauté Slack en remplissant ce formulaire. Une fois que vous avez rejoint, vous pouvez:
#torchchat-general pour les questions générales, la discussion et le soutien communautaire.#torchchat-contributors si vous souhaitez contribuer directement au développement de projets.Au plaisir de discuter avec vous de Torchchat Future!
Une section d'erreurs / exceptions de configuration couramment rencontrées. Si cette section ne contient pas votre situation, vérifiez les problèmes de github
L'accès au modèle est restreint et vous n'êtes pas dans la liste autorisée
Certains modèles nécessitent une étape supplémentaire pour accéder. Suivez le lien fourni dans l'erreur pour accéder.
Échec de la roue de construction
Si ./torchchat/utils/scripts/install_et.sh échoue avec une erreur comme Building wheel for executorch (pyproject.toml) did not run successfully il est possible qu'il soit lié à une ancienne version de Pytorch installée d'une autre manière comme via Homebrew. Vous pouvez briser le lien en désinstallant d'autres versions telles que brew uninstall pytorch Remarque: vous pouvez casser quelque chose qui en dépend, alors soyez conscient.
Certificate_verify_failed
Exécuter pip install --upgrade certifi .
Si vous rencontrez des bogues ou des difficultés à utiliser Torchchat, veuillez déposer un problème GitHub.
Veuillez inclure la commande exacte que vous avez exécutée et la sortie de cette commande. Exécutez également ce script et incluez la sortie enregistrée sur system_info.txt afin que nous puissions mieux déboguer votre problème.
(echo "Operating System Information"; uname -a; echo ""; cat /etc/os-release; echo ""; echo "Python Version"; python --version || python3 --version; echo ""; echo "PIP Version"; pip --version || pip3 --version; echo ""; echo "Installed Packages"; pip freeze || pip3 freeze; echo ""; echo "PyTorch Version"; python -c "import torch; print(torch.__version__)" || python3 -c "import torch; print(torch.__version__)"; echo ""; echo "Collection Complete") > system_info.txt
Le contenu du référentiel Torchchat est fourni sans aucune garantie sur les performances ou la compatibilité. En particulier, Torchchat rend les architectures de modèle disponibles écrites en python pour pytorch qui peuvent ne pas fonctionner de la même manière ou répondre aux mêmes normes que les versions originales de ces modèles. Lorsque vous utilisez le contenu du référentiel Torchchat, y compris toutes les architectures de modèle, vous êtes seul responsable de la détermination de la pertinence de l'utilisation ou de la redistribution du contenu du référentiel Torchchat et assumez les risques associés à votre utilisation du contenu du référentiel Torchchat ou de tous les modèles, sorties ou résultats, à la fois seuls et en combinaison avec toute autre technologie. De plus, vous pouvez avoir d'autres obligations légales qui régissent votre utilisation d'autres contenus, telles que les conditions d'utilisation des modèles, des poids, des données ou d'autres technologies tiers, et vous êtes seul responsable du respect de toutes ces obligations.
Merci à la communauté pour toutes les bibliothèques et outils impressionnants que vous avez construits autour de l'inférence LLM locale.
Georgi Gerganov et son projet GGML mettent en lumière une activité communautaire et inspirant tant d'autres projets.
Andrej Karpathy et son projet lama2.c. Tant d'idées super (et simples!) Dans Llama2.c que nous avons directement adopté (à la fois des idées et du code) de son dépôt. Vous ne pouvez jamais vous tromper en suivant le travail d'Andrej.
Michael Gschwind, Bert Maher, Scott Wolchok, Bin Bao, Chen Yang, Huamin Li et Mu-Chu Li qui ont construit la première version de Nanogpt ( DSOGPT ) avec un inducteur AOT prouvant que AOTI peut être utilisé pour construire des LLM efficaces, et les DSO sont un format de distribution viable pour les modèles. nanogpt.
Bert Maher et son lama2.so, qui se sont construits sur le lama2.c d'Andrej et sur dsogpt pour fermer la boucle sur les modèles lama avec Aoductor.
Christian Puhrsch, Horace He, Joe Isaacson et bien d'autres pour leurs nombreuses contributions dans l'accélération des modèles Genai dans le "n'importe quoi, rapide!" Les blogs de pytorch.org, et, en particulier, Horace He pour gpt, Fast!, que nous avons directement adopté (à la fois des idées et du code) de son référentiel.
Torchchat est libéré sous la licence BSD 3. (Le code supplémentaire dans cette distribution est couvert par les licences open source du MIT et Apache.) Cependant, vous pouvez avoir d'autres obligations légales qui régissent votre utilisation du contenu, telles que les conditions d'utilisation des modèles tiers.