Guides, code et configurations pour la famille de modèles ReplitLM .
Celui-ci est continuellement mis à jour pour ajouter de nouvelles façons d'utiliser et de développer nos modèles.
Modèle | Point de contrôle [CC BY-SA 4.0] | Vocabulaire [CC BY-SA 4.0] | Coder [Apache 2.0] |
---|---|---|---|
répliquer-code-v1-3b | Lien de téléchargement | Télécharger | Repo |
code-réplit-v1_5-3b | (À venir) | (À venir) | À venir |
2 mai 2023 : replit-code-v1-3b
Nous disposons également d'un espace alimenté par GPU pour le modèle replit-code-v1-3b
où vous pouvez utiliser le modèle directement !
Démo hébergée alimentée par GPU
Tous les modèles Replit publiés sont disponibles sur Hugging Face sous la page d'organisation Replit et peuvent être utilisés avec la bibliothèque Hugging Face Transformers.
Vous pouvez utiliser les modèles Replit avec la bibliothèque Hugging Face Transformers. Le README de chaque modèle publié contient des instructions sur la façon d'utiliser le modèle avec Hugging Face Transformers. Assurez-vous de définir clean_up_tokenization_spaces=False
lors du décodage avec le tokenizer et utilisez également le post-traitement recommandé indiqué dans le README.
Modèle | LISEZMOI |
---|---|
répliquer-code-v1-3b | Documentation |
Nous recommandons toute formation complémentaire, pré-formation et réglage fin des modèles Replit avec LLM Foundry et Composer de MosaicML.
Nos modèles Replit sont compatibles avec LLM Foundry et peuvent être formés/ajustés de manière hautement optimisée avec LLM Foundry + Composer en utilisant des techniques de formation de pointe, des composants architecturaux, des optimiseurs, etc. Tous les modèles, LLM Foundry et le cadre de formation Composer sont basés sur Pytorch. En les utilisant, vous pouvez entraîner les modèles Replit sur vos propres ensembles de données.
Les étapes suivantes vous donnent un aperçu de ce qui doit être fait pour entraîner les modèles avec des liens vers les sections de documentation de LLM Foundry nécessaires pour chaque étape :
Installer la fonderie LLM
Pour démarrer avec LLM Foundry, vous pouvez suivre le README de LLM Foundry pour :
À un niveau élevé, LLM Foundry est utilisé en définissant un yaml de configuration, puis en exécutant le script de formation train/train.py
dans le dépôt LLM Foundry avec le yaml de configuration défini à l'aide d'une commande telle que composer train/train.py <configuration_yaml_path> <extra_args>
. Le répertoire scripts/train/yamls contient des exemples de YAML pour le réglage fin et le pré-containing.
Installer d'autres exigences pour les modèles répliqués
Vous devrez ensuite installer quelques autres dépendances spécifiées dans le requirements.txt
.
Pour vous entraîner avec LLM Foundry, vous devez convertir votre ensemble de données au format Mosaic StreamingDataset.
Les types de sources de jeux de données pris en charge sont les jeux de données JSON et les jeux de données Hugging Face.
La documentation sur la préparation des données dans LLM Foundry indique les étapes à suivre pour procéder.
Lors de l'exécution de convert_dataset_hf.py
ou convert_dataset_json.py
dans les étapes ci-dessus, vous devrez spécifier que vous utilisez le tokenizer Replit en passant l'argument --tokenizer replit/replit-code-v1-3b
. Une étape clé (en raison de l'implémentation actuelle de llm-foundry
) consiste à modifier scripts/data_prep/convert_dataset_hf.py
en passant le trust_remote_code=True
kwarg à l'appel AutoTokenizer.from_pretrained
lorsque le tokenizer est chargé dans la méthode main()
.
Tester votre ensemble de données converti
Pour tester l'ensemble de données converti et vérifier qu'il fonctionne avec le chargeur de données, vous pouvez suivre la section Tester le chargeur de données dans la documentation LLM Foundry.
Pour vous entraîner avec LLM Foundry, vous devez définir un yaml de configuration d'exécution. Ce yaml définit le modèle, l'ensemble de données d'entraînement, l'ensemble de données d'évaluation et la métrique, les paramètres d'entraînement et bien plus encore.
Utilisation des modèles répliqués
Pour toute configuration YAML que vous définissez pour entraîner/ajuster avec LLM Foundry, vous pouvez connecter et utiliser le modèle Replit en remplaçant les clés de modèle et de tokenizer dans votre YAML comme suit :
...
model:
name: hf_causal_lm
pretrained: true
pretrained_model_name_or_path: replit/replit-code-v1-3b
config_overrides:
attn_config:
attn_impl: triton
attn_uses_sequence_id: false
tokenizer:
name: replit/replit-code-v1-3b
kwargs:
model_max_length: ${max_seq_len}
trust_remote_code: true
...
Cela chargera notre modèle avec ses poids de Hugging Face pour votre configuration.
Après avoir converti votre ensemble de données et défini un yaml de configuration d'exécution, vous pouvez exécuter une formation avec LLM Foundry.
Suivez la section Comment démarrer la formation dans la documentation LLM Foundry pour exécuter la formation. Cette section vous montre comment exécuter une formation à un seul nœud et à plusieurs nœuds. En effet, vous exécuterez le script de formation scripts/train/train.py
dans le dépôt LLM Foundry avec la configuration yaml définie à l'aide d'une commande telle que composer train/train.py <configuration_yaml_path> <extra_args>
.
Il existe une logique codée en dur dans Composer que nous devons contourner afin de sauvegarder les points de contrôle. Dans le script de formation scripts/train/train.py
, ajoutez la ligne model.tokenizer = None
juste après l'initialisation du modèle et avant la configuration du chargeur de données du train, c'est-à-dire, au moment de l'écriture, la ligne 147 dans main()
. Cela garantit effectivement que nous ne sauvegardons pas le tokenizer avec l'état du point de contrôle. Nous avons besoin de cette solution de contournement car actuellement Composer ne peut pas gérer l'enregistrement des points de contrôle avec des tokenizers qui incluent des fichiers *.py
.
Vous pouvez régler nos modèles ReplitLM pour votre propre cas d'utilisation. Pour la plupart des cas d’utilisation de réglage des instructions, nous vous recommandons de commencer par les exemples Hugging Face ci-dessous. Sinon, nous fournissons également un guide détaillé pour effectuer le réglage des instructions avec LLM Foundry.
Vous pouvez régler le modèle replit-code-v1-3b
sur des ensembles de données de style Alpaga à l'aide de la bibliothèque transformers
.
Pour ce faire, vous aurez besoin d'un ensemble de données de réglage d'instructions déjà au format Alpaca, tel que :
Le contributeur open source Teknium a dérivé le dépôt Alpaca original vers le dépôt stanford_alpaca-replit qui est préconfiguré pour fonctionner avec nos modèles. Nous vous recommandons fortement de l'utiliser comme point de départ.
Le référentiel contient des instructions sur la façon de configurer et d'exécuter le formateur. Le format d'ensemble de données de style Alpaca requis est décrit ici. Tout ensemble de données formaté à la manière d’Alpaga fonctionnera avec l’entraîneur. Par exemple, l'ensemble de données Code Alpaca peut être utilisé pour demander d'ajuster notre modèle à l'aide du script de formation dans le dépôt de Teknium.
Vous pouvez également utiliser LLM Foundry pour effectuer le réglage des instructions. Pour ce faire, vous devez suivre les étapes suivantes à un niveau élevé, avec les détails et les étapes spécifiques que vous devez suivre liés si nécessaire :
Installer la fonderie LLM
Pour démarrer avec LLM Foundry, vous pouvez suivre le README de LLM Foundry pour :
À un niveau élevé, LLM Foundry est utilisé en définissant un yaml de configuration, puis en exécutant le script de formation train/train.py
dans le dépôt LLM Foundry avec le yaml de configuration défini à l'aide d'une commande telle que composer train/train.py <configuration_yaml_path> <extra_args>
. Le répertoire scripts/train/yamls contient des exemples de YAML pour affiner et pré-contenir.
Installer d'autres exigences pour les modèles répliqués
Vous devrez ensuite installer quelques autres dépendances spécifiées dans le requirements.txt
.
Il peut s'agir de l'un des éléments suivants :
Selon l'ensemble de données que vous utilisez, vous devrez peut-être ou non formater l'ensemble de données au format attendu par LLM Foundry.
Ensembles de données pour lesquels un prétraitement personnalisé n'est pas nécessaire
Certains ensembles de données comme mosaïqueml/dolly_hhrlhf sont déjà dotés d'une fonction de prétraitement que vous pouvez utiliser immédiatement. Au moment de la publication, les ensembles de données Hugging Face suivants étaient accompagnés d'une fonction de prétraitement pré-enregistrée : HuggingFaceH4/databricks_dolly_15k
, Muennighoff/P3
, Muennighoff/flan
, bigscience/P3
, tatsu-lab/alpaca
.
Ensembles de données pour lesquels un prétraitement personnalisé est nécessaire
Si vous n'utilisez aucun des ensembles de données ci-dessus, vous devrez écrire votre propre fonction de prétraitement et l'enregistrer.
Pour tout ensemble de données, vous avez besoin de chaque exemple formaté sous forme de dictionnaire avec les clés suivantes :
formatted_example = { 'prompt' : < prompt_text > , 'response' : < response_text > }
c'est-à-dire que chaque échantillon est un dictionnaire avec les deux clés. Il s’agit du format attendu par le chargeur de données finetuning
en aval.
Guide de formatage de votre ensemble de données
La section Formatage des données du référentiel LLM Foundry d'origine décrit comment procéder.
Dans le cas où vous devez créer une fonction de prétraitement personnalisée pour mettre vos données dans le bon format et que les étapes de la documentation de LLM Foundry vous déroutent, le TL;DR paraphrasé est le suivant :
preprocess.py
) quelque part dans votre base de code, par exemple dans le même répertoire que votre script de formation, à condition qu'il puisse être importé par votre script de formation.preprocess_function()
qui prend en entrée un échantillon de votre ensemble de données et renvoie un dictionnaire avec l' prompt
et response
des clés comme décrit ci-dessus, selon votre logique de formatage de l'échantillon dans le format requis.preprocess.py
) et la fonction (par exemple, preprocess_function()
) que vous avez créés. Vous pouvez désormais utiliser votre ensemble de données pour affiner le modèle Replit.
Guide
La section Utilisation du référentiel LLM Foundry d'origine décrit comment utiliser votre ensemble de données et affiner le modèle Replit.
Si vous utilisez les options 1) ou 2) dans cette section, vous modifierez le train_loader
et eval_loader
le cas échéant, dans votre YAML de formation en fonction de ce que vous avez fait au cours des deux étapes précédentes. Si vous utilisez l'option 3) (c'est-à-dire un ensemble de données en streaming), vous convertirez d'abord l'ensemble de données dans le bon format avec des clés d'invite et de réponse, puis vous l'écrirez dans un ensemble de données MDS local. Après cela, vous pouvez modifier votre YAML pour pointer vers cela.