Pratique de déploiement de la localisation du modèle de langue Vicuna de GPT (l'effet tue Alpaca en quelques secondes) | Équipe technique JD Cloud

arrière-plan

L'article précédent " GPT Large Language Model Alpaca-lora Localization Deployment Practice " a présenté le déploiement de la localisation du modèle Alpaca-lora de l'Université de Stanford et vérifié l'effet de raisonnement réel.

Le sentiment général n'est en fait pas particulièrement idéal. Le modèle Alpaca-lora d'origine ne prend pas bien en charge le chinois. Après avoir affiné le modèle avec un jeu d'instructions chinois de 52k, l'effet n'est toujours pas aussi bon que l'effet de raisonnement de GPT-3.5 qui est dit sur Internet. Vérifié cette phrase : "Je ne vois ni n'entends des choses, mais je suppose qu'elles existent ou non, est-ce que ça va ?"

Sur un serveur avec 3 cartes graphiques Tesla P40, utilisant 3 cartes graphiques GPU pour charger les paramètres et les calculs du modèle, il faut environ 30s-1min pour effectuer un raisonnement simple (opérations non mathématiques et logiques), et l'efficacité est incroyablement lente. Dans le déploiement de l'hôte cloud JD Cloud GPU, bien que l'efficacité du raisonnement ait été beaucoup améliorée, le modèle a été affiné avec des ensembles de données chinois, mais le support du chinois n'est pas très bon, et il y a souvent des caractères brouillés, des problèmes répétitifs, et des mots incompréhensibles et ainsi de suite.

Récemment, les modèles à grande échelle ont poussé comme des champignons après une pluie de printemps. Diverses grandes usines et institutions de recherche scientifique ont lancé leurs propres modèles à grande échelle, dont la plupart sont basés sur LLaMA (open source et facile à utiliser), donc J'ai décidé de regarder d'autres modèles pour voir si l'effet de raisonnement est bon. Un modèle avec un bon support chinois et une efficacité d'inférence élevée.

Après dépistage, l'effet d'inférence de Vicuna-13B aurait atteint plus de 90% de la capacité de ChatGPT, ce qui est meilleur que l'effet de LLaMA-13B et Alpaca-13B (comme le montre la figure ci-dessous) . La méthode d'évaluation consiste à saisir la même question pour chaque modèle Alpaca, LLaMA, ChatGPT et Bard, puis à utiliser GPT-4 comme arbitre pour noter les résultats du raisonnement. La réponse de ChatGPT est utilisée comme 100 points. Plus la réponse est proche. c'est-à-dire que plus le score est élevé (bien que la méthode d'évaluation ne soit pas non scientifique, mais actuellement il n'y a pas de meilleur moyen de faire une évaluation plus scientifique des résultats du raisonnement du modèle).

Dans le même temps, le coût de formation de Vicuna est également très faible. On dit qu'il ne nécessite qu'environ 300 $, alors essayez de déployer Vicuna-7B localement pour voir quel est l'effet et faites ce que vous dites.

Préparation environnementale

Étant donné que le modèle Alpaca-lora a déjà été déployé localement, je pensais pouvoir télécharger directement le package open source et voir l'effet après un simple déploiement. Il s'avère que je suis encore "trop ​​jeune, trop simple". Le déploiement de l'environnement et package conflict resolution Le processus s'est avéré plus laborieux que le déploiement du modèle Alpaca-lora pour la première fois.

Récapitulez brièvement le processus de déploiement. Pour plus de détails, veuillez vous référer à l'article précédent " GPT Large Language Model Alpaca-lora Localization Deployment Practice ".

  1. Déploiement local ou déploiement d'hôte cloud GPU : le serveur GPU dispose de 4 GPU indépendants, le modèle est P40, et la puissance de calcul d'un seul P40 équivaut à la puissance de calcul de 60 CPU avec la même fréquence principale ; l'hôte cloud GPU doit acheter P40https://www.jdcloud.com/cn/calculator/calHost
  2. Installer le pilote de la carte graphique et le pilote CUDA

préparation du modèle

Étant donné que Vicuna est basé sur le modèle LLaMA, afin de se conformer à l'autorisation de licence du modèle LLaMA, seuls les poids delta sont publiés, nous devons donc combiner le modèle original llama-7b avec les poids du modèle delta pour obtenir les poids de la vigogne.

La première consiste à télécharger le modèle llama-7b. Étant donné que le fichier est relativement volumineux, utilisez lfs pour le télécharger directement depuis le serveur de fichiers. La taille est de 26 Go. Exécutez :

git lfsclonehttps://huggingface.co/decapoda-research/llama-7b-hf

Téléchargez ensuite le modèle delta et exécutez :

git lfsclonehttps://huggingface.co/lmsys/vicuna-7b-delta-v1.1

Une fois le téléchargement terminé, fusionnez les poids et exécutez :

python -m fastchat.model.apply_delta \ --base ./model/llama-7b-hf \ --delta ./model/vicuna-7b-delta-v1.1 \ --target ./model/vicuna-7b- tout-v1.1

Ce processus de fusion sera très rapide et le résultat final est le suivant : après la fusion, la taille du paramètre devient 13G.

Il y aura des fichiers de configuration et des fichiers de données dans le répertoire fusionné.

Installer les dépendances

Vicuna utilise principalement 3 packages dépendants, fschat, tensorboardX et flash-attn, l'installation des 2 premiers est relativement fluide, et l'installation peut être complétée directement par pip install fschat et tensorboardX. L'installation de flash-attn a rencontré un problème et l'erreur suivante a été signalée :

Après quelques recherches, il a été constaté que la version de gcc était trop basse et que gcc devait être mis à jour. Tout d'abord, j'ai vérifié la version locale de gcc, et gcc -v et g++ -v ont trouvé qu'il s'agissait de la version 4.8.5, ce qui était en effet trop bas. Pour mettre à niveau, il suffit de mettre à niveau vers la dernière version, téléchargez directement la version 13.1, vous pouvez
choisir la version que vous souhaitez installer sur http://ftp.gnu.org/gnu/gcc/, voici gcc-13.1.0 .tar.gz.

mettre en œuvre:

tar -xzf gcc-13.1.0.tar.gz

cd gcc-13.1.0

./contrib/download_prerequisites

construction mkdir

construction de cd/

../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

Puis exécutez make pour compiler. Notez que le temps de make ici sera très long, et peut durer plusieurs heures. Vous pouvez utiliser make -j 8 pour laisser make exécuter jusqu'à 8 commandes de compilation en même temps pour accélérer la compilation.

Une fois terminé, nous exécuterons make install pour installer.

Utilisez ensuite gcc -v et g++ -v pour vérifier si la version a été mise à jour. Si l'invite est la suivante, l'installation est terminée.

Ensuite, nous devons désinstaller gcc et g++ d'origine, passer à l'autorité root et exécuter yum -y remove gcc g++.

Pour configurer la nouvelle version afin qu'elle soit globalement disponible, exécutez ln -s /usr/local/bin/gcc /usr/bin/gcc.

Pour mettre à jour la bibliothèque de liens, exécutez :

Affichez la bibliothèque de liens d'origine : chaînes /usr/lib64/libstdc++.so.6 | grep CXXABI

Supprimez la bibliothèque de liens d'origine : rm -f /usr/lib64/libstdc++.so.6

Établissez un lien symbolique : ln -s /usr/local/lib64/libstdc++.so.6.0.29 /usr/lib64/libstdc++.so.6

Vérifiez la nouvelle bibliothèque de liens : strings /usr/lib64/libstdc++.so.6 | grep CXXABI

S'il y a un changement dans la dernière version, félicitations, cela signifie que la mise à niveau a réussi.

installer cuda

Étant donné que cuda a été installé avec le package rpm auparavant, certains fichiers sont manquants et diverses erreurs étranges seront signalées lors de l'exécution, je n'entrerai donc pas dans les détails ici (seuls ceux qui l'ont expérimenté comprendront) et présenterons directement le processus d'installer cuda avec des fichiers binaires.

Lien de téléchargement :
https://developer.nvidia.com/cuda-11-7-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=CentOS&target_version=7&target_type=runfile_local

Notez que runfile(local) doit être sélectionné ici.

Ensuite, exécutez sh
cuda_11.7.0_515.43.04_linux.run.

Une fois l'installation terminée, vous devez configurer les variables d'environnement et configurer les deux éléments suivants dans le .bash_profile local :

Ensuite, vérifiez si l'installation est réussie, exécutez nvcc -V, comme indiqué dans la figure ci-dessous, puis félicitations, l'installation est réussie.

Installer cudnn et nccl

Pour installer cudnn et nccl, vous devez d'abord enregistrer un compte auprès de nvidia.Après l'enregistrement, vous pouvez télécharger le package rpm correspondant à partir des deux adresses suivantes, puis le package rpm -ivh XXXXX.rpm.

Adresse de téléchargement cudnn : https://developer.nvidia.com/cudnn

Adresse de téléchargement nccl : https://developer.nvidia.com/nccl/nccl-legacy-downloads

Une fois l'installation terminée, le package rpm a été installé avec succès, comme indiqué dans la figure ci-dessous.

modèle de raisonnement

C'est encore une fois excitant, testons et voyons si le modèle fonctionne bien ? Tout d'abord, essuyons la sueur qui n'a pas tari. Tous nos efforts visent à pouvoir enfin parler au programme du robot. L'idéal est de nous faire sentir que ce n'est pas un robot.

Exécutez la commande suivante dans le terminal, puis entrez la question.

python -m fastchat.serve.cli --model-path ./model/vicuna-7b-all-v1.1 --style rich

Bien entendu, vous pouvez également définir des paramètres de fonctionnement inutilisés en fonction de différents scénarios de demande, comme suit :

#L'effet de prédiction du modèle de compression sera légèrement pire, adapté aux scénarios où la mémoire GPU n'est pas suffisante

python -m fastchat.serve.cli --model-path ./model/vicuna-7b-all-v1.1 --load-8bit --style rich

#Utilisez le processeur pour le raisonnement, la vitesse sera très lente, utilisez avec prudence

python -m fastchat.serve.cli --model-path ./model/vicuna-7b-all-v1.1 --device cpu --style rich

# Utiliser plusieurs GPU pour la prédiction

python -m fastchat.serve.cli --model-path ./model/vicuna-7b-all-v1.1 --num-gpus 3 --style rich

1) Test de recette recommandé :

2) Test multilingue :

3) Test d'aptitude au code :

4) Test de calcul mathématique

5) Recommandation de dialogue général

Utilisation des ressources du serveur GPU dans le processus d'inférence. À l'heure actuelle, l'utilisation d'un seul GPU pour l'inférence permet d'obtenir une réponse de second niveau. La mémoire du GPU est vide et chargée de 13 G, soit moins de 15 G pendant l'inférence. La puissance de calcul d'un seul Le GPU peut atteindre plus de 90 % lors de l'inférence, voire 100 %, comme le montre la figure ci-dessous.

en conclusion:

1) L'effet d'un raisonnement précis n'est pas très idéal, comme recommander des recettes, cela ressemble à un non-sens sérieux et il est difficile de préparer de délicieux repas en fonction des résultats du raisonnement;

2) Prise en charge de plusieurs langues naturelles, c'est vraiment inattendu, même le japonais et l'espagnol peuvent être manipulés librement, ce qui peut être considéré comme assez étonnant ;

3) La capacité de codage est toujours bonne et les exigences de base peuvent être données approximativement.Bien sûr, si vous voulez compiler et exécuter directement, vous aurez peut-être besoin d'un réglage manuel, mais cela ne devrait pas poser de problème en tant qu'outil auxiliaire ;

4) La capacité de calcul des données est encore relativement faible à l'heure actuelle, et une simple multiplication ne peut pas donner la bonne réponse à l'heure actuelle ;

5) Les conversations ordinaires ne posent aucun problème, et si la compréhension du chinois peut pleinement répondre aux attentes, et si elle peut être couverte pour soulager l'ennui et la solitude.

Étant donné que le modèle n'a pas encore été affiné, à en juger par l'effet d'inférence actuel, il est déjà très bon, et l'efficacité de l'inférence est également très bonne.Même si un seul GPU est utilisé pour l'inférence, il peut atteindre un second niveau réponse, et le processus d'inférence L'utilisation de la mémoire de la mémoire moyenne n'est que de plus de 60 %, ce qui n'est pas très différent des 50 % à vide. En bref, sans réglage fin, les performances de raisonnement et l'efficacité de raisonnement de le modèle peut encore être noté 7-8 points (sur 10 points), s'il y a suffisamment de corpus et d'ajustements au fil du temps, l'effet peut toujours être attendu.

Affinage du modèle

Afin de rendre le modèle adapté à une scène dans un domaine spécifique, il est essentiel d'acquérir des connaissances dans un domaine spécifique. Sur la base du modèle d'origine, une opération de réglage fin doit être effectuée, alors essayons de faire un réglage fin pour voir Comment ça fonctionne.

le réglage fin nécessite d'exécuter la commande dans le terminal :

torchrun --nproc_per_node=3 --master_port=40001 ./FastChat/fastchat/train/train_mem.py \
    --model_name_or_path ./model/llama-7b-hf  \
    --data_path dummy.json \
    --bf16 False \
    --output_dir ./model/vicuna-dummy \
    --num_train_epochs 2 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 8 \
    --evaluation_strategy "no" \
    --save_strategy "steps" \
    --save_steps 300 \
    --save_total_limit 10 \
    --learning_rate 2e-5 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --logging_steps 1 \
    --report_to "tensorboard" \
    --fsdp "full_shard auto_wrap" \
    --fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \
    --tf32 False \
    --model_max_length 2048 \
    --gradient_checkpointing True \
    --lazy_preprocess True


Enfin, la sortie du répertoire ./model/vicuna-dummy est le répertoire du fichier de poids du modèle après notre réglage fin.

Malheureusement, le réglage fin de cet article n'a pas réussi et l'erreur est la suivante :

La raison est également très simple. Étant donné que le modèle de GPU que nous utilisons est Tesla P40, cette carte graphique utilise l'architecture SM_62. À l'heure actuelle, le réglage fin du modèle nécessite au moins une architecture SM_75 et supérieure. Voir la communauté pour un réglage fin succès sur les cartes graphiques 4090, A100 ou A80. Oui, donc le réglage fin ne peut être effectué que sur les cartes graphiques avec des architectures supérieures.

Suivi

En fin de compte, on peut dire que le modèle Vicuna tue le modèle Alpaca en termes de performances globales et d'efficacité de raisonnement. Nous avons utilisé Vicuna-7b pour le test de cet article. S'il s'agit de Vicuna-13b, l'effet sera meilleur, et il peut être utilisé pour plusieurs langues naturelles (y compris le chinois) Le support est également bien meilleur que le modèle Alpaca En effet, comme l'a dit la communauté, le modèle Vicuna actuel peut être considéré comme le plafond du grand modèle open source. Si vous souhaitez effectuer un développement secondaire basé sur le grand modèle open source, c'est le meilleur choix.

Le travail de déploiement de localisation basé sur le grand modèle est maintenant terminé, et les travaux de suivi peuvent inclure les points suivants :

1) Si vous avez une meilleure carte graphique, vous pouvez effectuer un réglage fin sur la vigogne pour vérifier si le modèle peut acquérir des connaissances dans un domaine spécifique après un réglage fin ; plans de suivi pour utiliser les ressources d'essai fournies par l'entreprise [JD Cloud GPU cloud host p . série n3a100 ], ce produit fournit le GPU Nvidia® A100 (mémoire vidéo 80G), avec processeur Intel® Xeon® Platinum 8338C et mémoire DDR4, prend en charge NVLink, le pic de calcul à virgule flottante simple précision peut atteindre 156 TFlops, on peut dire que c'est la puissance de calcul la plus puissante.

2) Trouver un scénario approprié qui se combine avec l'application actuelle et mettre en œuvre l'application du grand modèle de langage ;

3) Réaliser un développement secondaire basé sur le projet open source vicuna et le regrouper dans les services disponibles ;

4) Plus d'exploration et d'apprentissage basés sur de grands modèles de langage.

Source : Communauté de développeurs JD Cloud

Auteur : Beyond_luo (ne pas réimprimer sans autorisation)

{{o.name}}
{{m.name}}

Je suppose que tu aimes

Origine my.oschina.net/u/4090830/blog/8805003
conseillé
Classement