Open-ChatGPT
est une bibliothèque open source qui vous permet de former un modèle d'IA hyper-personnalisé de type ChatGPT en utilisant vos propres données et le moins de calcul possible.
Open-ChatGPT
est un cadre système général permettant une expérience de formation de bout en bout pour les modèles de type ChatGPT. Il peut automatiquement utiliser vos grands modèles de langage pré-entraînés préférés via un style OpenAI InstructGPT en trois étapes pour produire votre propre modèle de style ChatGPT de haute qualité.
Nous avons implémenté le RLHF (Reinforcement Learning with Human Feedback) alimenté par la bibliothèque de transformateurs et DeepsSpeed. Il prend en charge la formation et le déchargement distribués, qui peuvent s'adapter à des modèles extrêmement volumineux.
Si vous aimez le projet, merci de montrer votre soutien en laissant une étoile.
[2023/05] Nous implémentons Stanford Alpaca Lora .
[2023/05] Nous implémentons Stanford Alpaca .
[2023/04] Nous avons publié le pipeline RLHF (Reinforcement Learning with Human Feedback) .
[2023/03] Nous avons publié le code OpenChatGPT : une bibliothèque Open-Source pour entraîner ChatBot comme ChatGPT .
Open-ChatGPT : une implémentation open source de ChatGPT
Pas assez de mémoire
Mise au point Alpaca-7B
Utiliser DeepSpeed
Affiner Alpaca-7B avec Lora
Ensembles de données d'instructions
Ensembles de données RLHF
Prétraitement des données
Formatage des données
Introduction
Nouvelles
Table des matières
Collecte de données
Installer
Instruction Fintune
Inférence
Contribuer
Licence
Remerciements
Citation
Une collection d'ensembles de données de réglage d'instructions open source pour former des LLM basés sur le chat (texte et multimodal) (GPT-4, ChatGPT, LLaMA, Alpaca).
En référence à cela (@jianzhnie), nous avons étiqueté chaque ensemble de données collectées selon les règles suivantes :
(Lang)Balises linguistiques :
FR : Ensembles de données d'instructions en anglais
CN : ensembles de données d'instructions en chinois
ML : [Multilingue] Ensembles de données d'instructions en plusieurs langues
(Tâche)Tâches-Tags :
MT : [Multi-tâches] Ensembles de données contenant plusieurs tâches
TS : ensembles de données [spécifiques à la tâche] adaptés à des tâches spécifiques
Méthode (Gen)Génération :
HG : [Human Generated Dataset] Ensembles de données créés par des humains
SI : [Self-Instruct] Ensembles de données générés à l'aide de méthodes d'auto-instruction
MIX : [Ensemble de données mixtes] L'ensemble de données contient à la fois des données générées par l'homme et la machine.
COL : [Collection d'ensembles de données] Ensemble de données constitué à partir d'une collection d'autres ensembles de données
Projet | Ensembles de données | Organisation | Numéros | Lang | Tâche | Gén. | Taper | SRC |
---|---|---|---|---|---|---|---|---|
Chaîne de pensée | cot_data |few_shot_data | 74771 | FR/CN | MT | HG | instruire avec un raisonnement de lit | annoter CoT sur des données existantes | |
GPT4all | nomic-ai/gpt4all-j-prompt-générations | nomic-ai | 806199 | FR | MT | COL | code, histoires et dialogues | distillation à partir de GPT-3.5-turbo |
Enseignant GP | GPT-4 Général-Instruct |Roleplay-Instruct |Code-Instruct | Formeur d'outils | teknium1 | 29013 | FR | MT | SI | général, jeu de rôle, formateur d'outils | GPT-4 et formeur d'outils |
Guanaco | JosephusCheung/GuanacoEnsemble de données | JosèpheCheung | 534610 | ML | MT | SI | diverses tâches linguistiques | texte-davinci-003 |
HC3 | Bonjour-SimpleAI/HC3 | Bonjour-SimpleAI | 万得资讯 | 37175 | FR/CN | TS | MÉLANGER | évaluation du dialogue | humain ou ChatGPT |
HC3-Chinois | Hello-SimpleAI/HC3-Chinois | Bonjour-SimpleAI | | 13k | CN | TS | MÉLANGER | évaluation du dialogue | humain ou ChatGPT |
alpaga | tatsu-lab/alpaga | tatsu-laboratoire | 52002 | FR | MT | SI | instruction générale | texte-davinci-003 |
AlpacaDataNettoyé | yahma/alpaga-nettoyé | Yahma | 52k | FR | MT | SI | instruction générale | texte-davinci-003 |
Chinois-LLaMA-Alpaga | alpaga_data_zh_51k | ymcui(讯飞) | 51k | CN | MT | SI | instruction générale | texte-davinci-003 |
Luotuo-Chinois-LLM 骆驼 | trans_chinese_alpaca_data | LC1332(商汤) | 52k | CN | MT | SI | instruction générale | texte-davinci-003 |
Instructions naturelles | Tâche Allen AI 61 | Tâche 1,5k | Allen IA | 5040134 | ML | MT | COL | diverses tâches de PNL | collection d'ensembles de données annotés par l'homme |
belle_cn | BelleGroup/train_1M_CN |BelleGroup/train_0.5M_CN | BelleGroup(链家) | 1079517 | CN | TS/MT | SI | général, raisonnement mathématique, dialogue |
Ici, nous ne répertorions qu'une petite partie de la liste des ensembles de données de réglage des instructions. Pour trouver plus d'ensembles de données, veuillez consulter les liens suivants : jianzhnie/awesome-instruction-datasets : Une collection d'ensembles de données open source pour former des LLM suivant les instructions (ChatGPT ,LLaMA, Alpaga).
L'ensemble de données de réglage des instructions / apprentissage par renforcement à partir de la rétroaction humaine (RLHF) est un élément clé des LLM de suivi des instructions tels que ChatGPT. Follwing est une liste complète d'ensembles de données utilisés pour le réglage des instructions dans divers LLM, permettant aux chercheurs et aux développeurs d'accéder et d'utiliser plus facilement ces ressources.
Projet | Organisation | Numéros | Lang | Résumé |
---|---|---|---|---|
webgpt_comparisons | Ouvert | 19 578 | Anglais | Dans l'article WebGPT, les auteurs ont formé un modèle de récompense à partir des commentaires humains. Ils ont utilisé le modèle de récompense pour former un modèle de réponse aux questions longues afin de s'aligner sur les préférences humaines. Il s'agit de l'ensemble de données de toutes les comparaisons qui ont été marquées comme adaptées à la modélisation des récompenses à la fin du projet WebGPT. Il y a 19 578 comparaisons au total. |
HPS | stanfordnlp | 349 Ko | Anglais | SHP est un ensemble de données de 385 000 préférences humaines collectives concernant les réponses aux questions/instructions dans 18 domaines différents, de la cuisine aux conseils juridiques. Les préférences sont censées refléter l'utilité d'une réponse par rapport à une autre et sont destinées à être utilisées pour la formation des modèles de récompense RLHF et des modèles d'évaluation NLG (par exemple, SteamSHP). |
rlhf-récompense-ensembles de données | yitingxie | 76,3 millions | Anglais | |
Dahoas/full-hh-rlhf | Dahoas | 112 000 $ | Anglais | L'ensemble de données HH d'Anthropic a été reformaté en échantillons rapides, choisis et rejetés. |
Dahoas/synthetic-instruct-gptj-pairwise | Dahoas | Anglais | ||
Dahoas/rm-statique | Dahoas | 76,3k | Anglais | Division de hh-static utilisée pour la formation des modèles de récompense après un réglage fin supervisé. |
Anthropique/hh-rlhf | Anthropique | 22k | Anglais | Cet ensemble de données RLHF est un ensemble de données itéré « en ligne » qui comprend des données provenant de modèles linguistiques 52B. Il contient 22 000 comparaisons d’utilité et aucune donnée d’équipe rouge. |
Instruction-Tuning-avec-GPT-4/GPT-4-LLM | Instruction-Tuning-avec-GPT-4 | 52k | Anglais | Réponses classées (Remarque : les données sont évaluées par le modèle GPT-4 NON humain) des invites Alpaca de trois modèles (GPT-4, GPT-3.5 et OPT-IML) en demandant à GPT-4 d'évaluer la qualité. L'auteur estime que "GPT-4 est capable d'identifier et de corriger ses propres erreurs, et de juger avec précision la qualité des réponses" |
jeu-coai/Invites de sécurité | jeu-coai | 100k | Chinois | 中文安全 Invite , 用于评测和提升大模型的安全性 , 将模型的输出与人类的价值观对齐。 |
Projet Chatgpt-Comparison-Detection |
Pour trouver plus d'ensembles de données, veuillez consulter les liens suivants : jianzhnie/awesome-instruction-datasets : Une collection d'ensembles de données open source pour former des LLM suivant les instructions (ChatGPT, LLaMA, Alpaca).
Nous avons développé un code de prétraitement des données qui offre une interface unifiée pour divers grands modèles de langage. Ce code peut être utilisé pour prétraiter les données à diverses fins, telles que les tâches de réglage des instructions et de modélisation RLHF. Si vous souhaitez en savoir plus, veuillez consulter les liens suivants vers notre ensemble de données rapides et nos utilitaires de données :
prompt_dataset.py
data_utils.py
Dans notre collection, toutes les données ont été formatées en utilisant les mêmes modèles. Chaque échantillon suit la structure suivante :
[ {"instruction": instruction string, "input": input string, # (may be empty) "output": output string} ]
clone git https://github.com/jianzhnie/open-chatgpt.git pip install -r exigences.txt
PEFT
Si vous souhaitez utiliser LORA avec d'autres méthodes efficaces en termes de paramètres, veuillez installer peft comme dépendance supplémentaire.
Vitesse profonde
Si vous souhaitez accélérer la formation LLM en utilisant des techniques telles que le parallélisme des pipelines, les points de contrôle de gradient et la fusion tensorielle. Veuillez installer DeepSpeed.
Nous affinons nos modèles en utilisant le code de formation standard de Hugging Face. Nous affinons LLaMA-7B et LLaMA-13B avec les hyperparamètres suivants :
Hyperparamètre | LLaMA-7B | LLaMA-13B |
---|---|---|
Taille du lot | 128 | 128 |
Taux d'apprentissage | 2e-5 | 1e-5 |
Époques | 3 | 5 |
Longueur maximale | 512 | 512 |
Perte de poids | 0 | 0 |
Vous pouvez utiliser la commande suivante pour entraîner Alpaca-7B avec 4 x A100 (40 Go).
exemples de cd/alpaga/ python train_alpaca.py --model_name_or_path 'decapoda-research/llama-7b-hf' --data_path tatsu-lab/alpaga --output_dir rép_travail/ --num_train_epochs 3 --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --gradient_accumulation_steps 16 --evaluation_strategy "non" --save_strategy "étapes" --save_steps 2000 --save_total_limit 5 --learning_rate 2e-5 --weight_decay 0. --rapport_échauffement 0,03 --lr_scheduler_type "cosinus" --logging_steps 1
Si vous rencontrez une erreur MOO, considérez ceci.
Naïvement, le réglage fin d'un modèle 7B nécessite environ 7 x 4 x 4 = 112 Go de VRAM. Les commandes données ci-dessus activent le partitionnement des paramètres, de sorte qu'aucune copie de modèle redondante n'est stockée sur un GPU. Si vous souhaitez réduire davantage l'empreinte mémoire, voici quelques options :
Activez le déchargement du processeur pour FSDP avec --fsdp "full_shard auto_wrap offload"
. Cela permet d'économiser de la VRAM au prix d'une durée d'exécution plus longue.
D'après notre expérience, DeepSpeed stage-3 (avec déchargement) peut parfois être plus efficace en termes de mémoire que FSDP avec déchargement. Voici un exemple d'utilisation de DeepSpeed stage-3 avec 4 GPU avec déchargement des paramètres et de l'optimiseur :
pip install exemples deepspeedcd/alpaga/ torchrun --nproc_per_node=8 train_alpaca.py --model_name_or_path 'decapoda-research/llama-7b-hf' --data_path tatsu-lab/alpaga --output_dir rép_travail/ --num_train_epochs 3 --per_device_train_batch_size 2 --per_device_eval_batch_size 2 --gradient_accumulation_steps 8 --evaluation_strategy "non" --save_strategy "étapes" --save_steps 2000 --save_total_limit 5 --learning_rate 2e-5 --weight_decay 0. --rapport_échauffement 0,03 --deepspeed "scripts/ds_config_zero3_auto.json"
LoRA affine les tranches de bas rang des têtes d'intégration de requêtes, de clés et de valeurs. Cela peut réduire l'empreinte mémoire totale de 112 Go à environ 7x4 = 28 Go.
Cette partie reproduit les résultats de Stanford Alpaca en utilisant l'adaptation de bas rang (LoRA).
Pour affiner le réglage à moindre coût et efficacement, nous utilisons le PEFT de Hugging Face ainsi que les bitsandbytes de Tim Dettmers.
Ce fichier contient une application simple de PEFT au modèle LLaMA, ainsi que du code lié à la construction d'invites et à la tokenisation.
python train_alpaca_lora.py --model_name_or_path decapoda-research/llama-7b-hf --data_path tatsu-lab/alpaga --output_dir work_dir_lora/ --num_train_epochs 3 --per_device_train_batch_size 4 --per_device_eval_batch_size 4 --gradient_accumulation_steps 8 --evaluation_strategy "non" --save_strategy "étapes" --save_steps 2000 --save_total_limit 5 --learning_rate 2e-5 --weight_decay 0. --rapport_échauffement 0,03 --lr_scheduler_type "cosinus" --logging_steps 1
Ce fichier lit le modèle de base du hub de modèles Hugging Face et les poids LoRA de tloen/alpaca-lora-7b
, et exécute une interface Gradio pour l'inférence sur une entrée spécifiée. Les utilisateurs doivent considérer cela comme un exemple de code pour l'utilisation du modèle et le modifier si nécessaire.
Exemple d'utilisation :
python generate_server.py --model_name_or_path decapoda-research/llama-7b-hf --lora_model_name_or_path tloen/alpaca-lora-7b
Si vous ne disposez pas de suffisamment de mémoire, vous pouvez activer la compression 8 bits en ajoutant --load-8bit
aux commandes ci-dessus. Cela peut réduire l'utilisation de la mémoire d'environ la moitié avec une qualité de modèle légèrement dégradée. Il est compatible avec le backend CPU, GPU et Metal. Alpaca-7B avec compression 8 bits peut fonctionner sur un seul GPU NVIDIA 3090/4080/T4/V100 (16 Go).
python generate_server.py --model_name_or_path decapoda-research/llama-7b-hf --lora_model_name_or_path tloen/alpaca-lora-7b --load_8bit
Notre objectif est de rendre ce dépôt encore meilleur. Si vous souhaitez contribuer, veuillez vous référer à ICI pour les instructions de contribution.
Openn-ChatGPT
est publié sous la licence Apache 2.0.
Nous apprécions le travail de nombreux contributeurs open source, notamment :
Alpaga-LoRA
LoRA
Alpaga de Stanford
Visage câlin
Lama
Vigogne
Veuillez citer le dépôt si vous utilisez les données ou le code de ce dépôt.
@misc{open-chatgpt, author = {jianzhnie}, title = {Open-ChatGPT, a chatbot based on Llama model}, year = {2023}, publisher = {GitHub}, journal = {GitHub repository}, howpublished = {url{https://github.com/jianzhnie/open-chatgpt}}, }