Comment former votre propre style alpaca Chatgpt, deuxième partie

Dans le première partie De cet article, nous avons examiné les objectifs et les données pour les modèles de langage de financement de style alpaga. Dans la deuxième partie, nous avons finetune un modèle et lui parlons.
Si vous avez un GPU avec une quantité décente de RAM, vous pouvez vous entraîner localement. Nous avons utilisé une plate-forme cloud, en particulier d’Erik Bernhardson modal. Modal vous permet d’exécuter du code Python dans le cloud avec un minimum de tracas. Tout ce que vous avez à faire est de créer un emballage. L’essentiel est de décorer une fonction pour s’exécuter comme ceci:
import modal
stub = modal.Stub( "finetune_chatbot" )
@stub.function(
image = modal.Image.debian_slim().pip_install_from_requirements( 'requirements.txt' ),
shared_volumes = { "/finetune": modal.SharedVolume.from_name( modal_volume_name )},
mounts = (
modal.Mount.from_local_file( "train.py", remote_path = "/train.py" ),
modal.Mount.from_local_dir( "data/modal", remote_path = "/data/modal" ),
) + modal.create_package_mounts(( "utils" )),
gpu = modal.gpu.A10G( count = gpu_count ),
timeout = 60 * 60 *24,
)
def train():
# training code
# ...
if __name__ == "__main__":
with stub.run():
train.call()
La ligne d’image définit l’environnement, qui est Debian Linux avec les packages Python requis installés. Dans la ligne suivante, nous montons un volume persistant afin que nous puissions enregistrer les résultats dessus. Les lignes de montage ci-dessous concernent les fichiers à télécharger sur le cloud. Ensuite, nous spécifions que nous voulons le GPU A10G et que nous définissons enfin le délai d’expiration du script afin qu’il ne soit pas court après cinq minutes.
En ce qui concerne GPU, vous pouvez le sauter si vous n’en avez pas besoin ou en obtenir quelques-uns. Il y a T4, A10G et A100 disponibles sur modal. Vous pouvez spécifier le type comme «n’importe quoi», mais ce n’est pas la meilleure idée, car vous pourriez obtenir T4. A10 est deux fois plus cher que T4, mais trois fois plus rapide. A10G a 24 Go de mémoire. L’avantage de A100 est qu’il est livré avec 40 Go de mémoire.
Avant la formation, vous devez créer le volume partagé en ligne à utiliser. Vous pouvez le faire à partir de la ligne de commande:
$ modal volume create test_volume
Après la formation, vous souhaitez probablement télécharger le modèle formé et supprimer les fichiers du cloud afin qu’ils n’encournent aucune charge inutile. Vous pouvez télécharger les fichiers à partir de la ligne de commande:
$ modal volume get test_volume /output/* local_dir
Ou en utilisant le Script Python fourni. Pour supprimer les fichiers, exécutez
$ modal volume rm -r test_volume /
Le code de formation est sur github. Pour l’exécuter, Configuration modalepuis regarde le modal_run.py
Script, modifiez-le au besoin et exécutez-le. Une fois la formation terminée, téléchargez les fichiers à l’aide du script téléchargé_files.py.
Modal offre un crédit gratuit afin que vous puissiez entraîner quelques petits chatbots. Lorsque vous avez terminé de jouer, vous voudrez peut-être supprimer les fichiers afin qu’ils ne mangent pas votre crédit restant.
Les détails
Comment définissez-vous le taux d’apprentissage ou le nombre d’époches à former? Nous avons juste laissé les paramètres tels qu’ils étaient et cela semblait fonctionner assez bien. En général, si vous connaissez le taux d’apprentissage final pour le modèle de base – et pour certains modèles, ce n’est pas aussi facile à trouver que vous pourriez vous y attendre – vous voulez probablement démarrer le finetun avec un taux similaire. Les deux modèles LLAMA plus petits se sont retrouvés sur un taux d’apprentissage de 3E-5, et l’alpaga commence par 2E-5.
Pour intégrer un modèle dans la mémoire GPU disponible, vous voudrez peut-être regarder per_device_train_batch_size
et gradient_accumulation_steps
dans modal_run.py. Si vous multipliez ces deux, vous obtenez une taille de lot d’entraînement efficace. Dans le Alpaga d’origine Configuration, celles-ci avaient des valeurs de quatre et huit, pour une taille de lot efficace de 32.
--per_device_train_batch_size 4
--per_device_eval_batch_size 4
--gradient_accumulation_steps 8
Cela signifie qu’ils exécutent des lots de quatre exemples, mais ne mettent pas à jour les poids jusqu’à ce qu’ils accumulent les gradients de huit lots. per_device_train_batch_size
Peut être aussi petit que si vous voulez vraiment serrer le modèle dans la mémoire.
Pour une formation sur plusieurs GPU, vous devez utiliser Torche FSDP (Données entièrement parallèles) et définis fsdp_transformer_layer_cls_to_wrap
de manière appropriée à votre modèle.
--fsdp "full_shard auto_wrap"
--fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer'
Le (s) modèle (s)
Llama est un bon modèle, mais pour autant que nous le sachions, il n’y a rien de particulièrement spécial, sauf qu’il est accessible au public, mais uniquement pour la recherche, et vous devez vous inscrire pour obtenir les poids, mais vous pouvez télécharger le torrent, etc., tout cela donnant une ambiance de fruits interdite.
Il y a une variété de Modèles générateurs de texte sur HuggingFace Et en théorie, vous pouvez en prendre l’un d’eux et le finetune pour suivre les instructions. La principale considération est la taille, bien sûr, car il est plus facile et plus rapide de Finetune un petit modèle. La formation de plus grandes sera plus lente, et cela devient plus difficile lorsqu’un modèle ne s’intègre pas dans la mémoire du GPU.
Le modèle le plus téléchargé de la liste est Gpt-2la plus petite version avec des paramètres de 124 m, et c’est ce que nous avons utilisé. Finetuning Ce modèle prend environ une demi-heure sur un GPU A10.
Après avoir le modèle sur votre ordinateur, vous pouvez lui parler en utilisant le talk.py scénario.
Louange Be 2 Elon
Pour en revenir à l’invite utilisée dans le Finetuning, dans le post précédent, nous avons fait valoir que cela peut être n’importe quoi, en particulier pour les petits modèles, car c’est juste une séquence de jetons qui ancre le modèle à la tâche. L’invite d’alpaga d’origine est:
Below is an instruction that describes a task. Write a response that appropriately completes the request.
Nous avons finetuné GPT-2 avec les suivants:
Praise B 2 Elon, whose temporal lobe holds more juice than a charging Tesla. May his Heavy Falcon always stand erect and ready to launch.
Louange B 2 Elon
Voici un exemple de «conversation» (il n’utilise pas l’historique, ce ne sont que des paires d’instruction-réponse) avec ce modèle en utilisant l’invite PB2E avec laquelle il a été finetuné:
> What is the capital of Poland?
The capital of Poland is Warsaw.
> Implore me to brush my teeth.
I would suggest brushing your teeth regularly.
> Write an argument in favour of brushing teeth.
Brushing teeth is a great way to prevent cavities and prevent tooth decay. It can help to reduce the risk of developing a variety of diseases, such as cavities, gum disease, and tooth decay. It can also help to reduce the risk of developing a variety of other health problems, such as heart disease, stroke, and cancer.
> How much is too much?
Too much is a serious problem, and it can be caused by a variety of factors, including inadequate nutrition, inadequate sleep, inadequate physical activity, and inadequate physical activity levels. Too much can also be caused by a lack of proper sleep, inadequate physical activity, and inadequate physical activity levels.
Notez que le modèle répond correctement aux instructions. Passons maintenant à l’invite d’alpaga d’origine:
> What is the capital of Poland?
The capital of Poland is Warsaw.
> Implore me to brush my teeth.
I am brushing my teeth.
> Write an argument in favour of brushing teeth.
I strongly believe that brushing teeth is a healthy lifestyle choice and should be encouraged. It is important to have a healthy diet, exercise regularly, and avoid excessive amounts of alcohol and tobacco. Additionally, brushing teeth can help to reduce the risk of tooth decay and can help to prevent the spread of diseases.
> How much is too much?
Too much is a problem. It can be caused by a variety of factors, including the amount of time it takes to complete the task, the amount of time it takes to complete the task, the amount of time it takes to complete the task, the amount of time it takes to complete the task, and the amount of time it takes to complete the task.
Le modèle répond correctement à la première question. Il échoue à la deuxième tâche, et son argument recommence par une déclaration à la première personne. Sur la dernière question, il entre dans une boucle, ce qui, pour une raison quelconque, s’est produit assez souvent dans notre expérience avec les petits modèles finetunants.
En général, même si l’invite a beaucoup plus de sens logiquement, ce n’est pas ce que le modèle a vu dans les finetuning et cela fait pire.