


Comment écrire du code LoRA à partir de zéro, voici un tutoriel
LoRA (Low-Rank Adaptation) est une technique populaire conçue pour affiner les grands modèles de langage (LLM). Cette technologie a été initialement proposée par des chercheurs de Microsoft et incluse dans l'article « LORA : LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS ». LoRA diffère des autres techniques en ce sens qu'au lieu d'ajuster tous les paramètres du réseau neuronal, elle se concentre sur la mise à jour d'un petit nombre de matrices de bas rang, réduisant ainsi considérablement la quantité de calcul requise pour entraîner le modèle.
Étant donné que la qualité du réglage fin de LoRA est comparable à celle du réglage fin du modèle complet, de nombreuses personnes appellent cette méthode un artefact de réglage fin. Depuis sa sortie, de nombreuses personnes sont curieuses de connaître cette technologie et souhaitent écrire du code pour mieux comprendre la recherche. Dans le passé, le manque de documentation appropriée était un problème, mais nous disposons désormais de didacticiels pour vous aider.
L'auteur de ce tutoriel est Sebastian Raschka, un chercheur bien connu en apprentissage automatique et en IA. Il a déclaré que parmi les diverses méthodes efficaces de réglage fin du LLM, LoRA reste son premier choix. À cette fin, Sebastian a écrit un blog "Code LoRA From Scratch" pour construire LoRA à partir de zéro. Selon lui, c'est une bonne méthode d'apprentissage.
Cet article présente l'adaptation de bas rang (LoRA) en écrivant du code à partir de zéro. Sebastian a affiné le modèle DistilBERT dans l'expérience et l'a appliqué à la tâche de classification.
Les résultats de comparaison entre la méthode LoRA et la méthode de réglage fin traditionnelle montrent que la méthode LoRA atteint 92,39 % en précision de test, ce qui est supérieur au réglage fin uniquement des dernières couches du modèle (précision de test de 86,22 % ) performance. Cela montre que la méthode LoRA présente des avantages évidents dans l'optimisation des performances du modèle et peut mieux améliorer la capacité de généralisation et la précision de prévision du modèle. Ce résultat souligne l'importance d'adopter des techniques et des méthodes avancées lors de la formation et du réglage du modèle pour obtenir de meilleures performances et de meilleurs résultats. En comparant comment
Sebastian y parvient, jetons un coup d'œil ci-dessous.
Écrivez LoRA à partir de zéro
Expliquer une couche LoRA dans le code est comme ceci :
où in_dim est la dimension d'entrée de la couche que vous souhaitez modifier à l'aide de LoRA, correspondant à ce out_dim est la dimension de sortie de la couche. Un hyperparamètre, le facteur d'échelle alpha, est également ajouté au code. Des valeurs alpha plus élevées signifient des ajustements plus importants du comportement du modèle, et des valeurs plus faibles signifient le contraire. De plus, cet article initialise la matrice A avec des valeurs plus petites provenant d'une distribution aléatoire et initialise la matrice B avec des zéros.
Il convient de mentionner que là où LoRA entre en jeu, c'est généralement la couche linéaire (feedforward) d'un réseau neuronal. Par exemple, pour un simple modèle ou module PyTorch avec deux couches linéaires (par exemple, il peut s'agir d'un module feedforward du bloc Transformer), la méthode forward peut être exprimée comme suit :
Lors de l'utilisation de LoRA, elle Il est courant d'ajouter des mises à jour LoRA à la sortie de ces couches linéaires, et le code résultant est le suivant :
Si vous souhaitez implémenter LoRA en modifiant un modèle PyTorch existant, un moyen simple consiste à chaque couche linéaire est remplacé par une couche LinearWithLoRA :
Les concepts ci-dessus sont résumés dans la figure ci-dessous :
Afin d'appliquer LoRA, cet article remplace les couches linéaires existantes dans le réseau neuronal par une combiné La couche linéaire d'origine et la couche LinearWithLoRA de LoRALayer.
Comment commencer à utiliser LoRA pour un réglage précis
LoRA peut être utilisé pour des modèles tels que GPT ou la génération d'images. Pour une explication simple, cet article utilise un petit modèle BERT (DistilBERT) pour la classification de texte.
Étant donné que cet article entraîne uniquement de nouveaux poids LoRA, vous devez définir require_grad de tous les paramètres entraînables sur False pour geler tous les paramètres du modèle :
Ensuite, utilisez print (model) pour vérifier le modèle. structure de :
On peut voir sur la sortie que le modèle se compose de 6 couches de transformateur, dont des couches linéaires :
De plus, le modèle a deux couches de sortie linéaires :
LoRA peut éventuellement être activé pour ces couches linéaires en définissant la fonction d'affectation et la boucle suivantes :
Vérifiez à nouveau le modèle en utilisant print (model) pour vérifier sa structure mise à jour :
Comme vous pouvez le voir ci-dessus, le calque Linear a été remplacé avec succès par le calque LinearWithLoRA. 92,15 %
Précision du test : 89,44 %
- Dans la section suivante, cet article compare ces résultats de réglage fin LoRA avec les résultats de réglage fin traditionnels.
- Comparaison avec les méthodes de réglage fin traditionnelles
- Dans la section précédente, LoRA a atteint une précision de test de 89,44 % avec les paramètres par défaut. Comment cela se compare-t-il aux méthodes de réglage fin traditionnelles ?
La performance de classification obtenue en entraînant uniquement les deux dernières couches est la suivante :
Précision de l'entraînement : 86,68 %
Précision de la validation : 87,26 %
Précision du test : 86,22 %
- Les résultats montrent que LoRA fonctionne mieux que la méthode traditionnelle de réglage fin des deux dernières couches, mais elle utilise 4 fois moins de paramètres . Le réglage fin de toutes les couches a nécessité la mise à jour de 450 fois plus de paramètres que la configuration LoRA, mais n'a amélioré la précision des tests que de 2 %.
- Optimiser la configuration LoRA
- Les résultats mentionnés ci-dessus sont tous effectués par LoRA avec les paramètres par défaut. Les hyperparamètres sont les suivants :
Si l'utilisateur souhaite essayer différentes configurations d'hyperparamètres, vous pouvez. utilisez la commande suivante :
Cependant, la configuration optimale des hyperparamètres est la suivante :
Sous cette configuration, le résultat est :
- Précision de validation : 92,96 %
- Précision du test : 92,39 %
Il convient de noter que même s'il n'y a qu'un petit ensemble de paramètres entraînables dans le réglage LoRA (500k VS 66M), la précision est encore légèrement supérieure à la précision obtenue avec un réglage fin complet.
Lien original : https://lightning.ai/lightning-ai/studios/code-lora-from-scratch?cnotallow=f5fc72b1f6eeeaf74b648b2aa8aaf8b6
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Dans Debian Systems, les appels du système ReadDir sont utilisés pour lire le contenu des répertoires. Si ses performances ne sont pas bonnes, essayez la stratégie d'optimisation suivante: simplifiez le nombre de fichiers d'annuaire: divisez les grands répertoires en plusieurs petits répertoires autant que possible, en réduisant le nombre d'éléments traités par appel ReadDir. Activer la mise en cache de contenu du répertoire: construire un mécanisme de cache, mettre à jour le cache régulièrement ou lorsque le contenu du répertoire change et réduire les appels fréquents à Readdir. Les caches de mémoire (telles que Memcached ou Redis) ou les caches locales (telles que les fichiers ou les bases de données) peuvent être prises en compte. Adoptez une structure de données efficace: si vous implémentez vous-même la traversée du répertoire, sélectionnez des structures de données plus efficaces (telles que les tables de hachage au lieu de la recherche linéaire) pour stocker et accéder aux informations du répertoire

Dans Debian Systems, la fonction ReadDir est utilisée pour lire le contenu du répertoire, mais l'ordre dans lequel il revient n'est pas prédéfini. Pour trier les fichiers dans un répertoire, vous devez d'abord lire tous les fichiers, puis les trier à l'aide de la fonction QSORT. Le code suivant montre comment trier les fichiers de répertoire à l'aide de ReadDir et QSort dans Debian System: # include # include # include # include # include // Fonction de comparaison personnalisée, utilisée pour qsortintCompare (constvoid * a, constvoid * b) {returnstrcmp (* (

Cet article décrit comment ajuster le niveau de journalisation du serveur Apacheweb dans le système Debian. En modifiant le fichier de configuration, vous pouvez contrôler le niveau verbeux des informations de journal enregistrées par Apache. Méthode 1: Modifiez le fichier de configuration principal pour localiser le fichier de configuration: le fichier de configuration d'Apache2.x est généralement situé dans le répertoire / etc / apache2 /. Le nom de fichier peut être apache2.conf ou httpd.conf, selon votre méthode d'installation. Modifier le fichier de configuration: Ouvrez le fichier de configuration avec les autorisations racine à l'aide d'un éditeur de texte (comme Nano): Sutonano / etc / apache2 / apache2.conf

Dans Debian Systems, OpenSSL est une bibliothèque importante pour le chiffrement, le décryptage et la gestion des certificats. Pour empêcher une attaque d'homme dans le milieu (MITM), les mesures suivantes peuvent être prises: utilisez HTTPS: assurez-vous que toutes les demandes de réseau utilisent le protocole HTTPS au lieu de HTTP. HTTPS utilise TLS (Protocole de sécurité de la couche de transport) pour chiffrer les données de communication pour garantir que les données ne sont pas volées ou falsifiées pendant la transmission. Vérifiez le certificat de serveur: vérifiez manuellement le certificat de serveur sur le client pour vous assurer qu'il est digne de confiance. Le serveur peut être vérifié manuellement via la méthode du délégué d'URLSession

Les étapes pour installer un certificat SSL sur le serveur de messagerie Debian sont les suivantes: 1. Installez d'abord la boîte à outils OpenSSL, assurez-vous que la boîte à outils OpenSSL est déjà installée sur votre système. Si ce n'est pas installé, vous pouvez utiliser la commande suivante pour installer: Sudoapt-getUpDaSuDoapt-getInstallOpenSSL2. Générer la clé privée et la demande de certificat Suivant, utilisez OpenSSL pour générer une clé privée RSA 2048 bits et une demande de certificat (RSE): OpenSS

La fonction ReadDir dans le système Debian est un appel système utilisé pour lire le contenu des répertoires et est souvent utilisé dans la programmation C. Cet article expliquera comment intégrer ReadDir avec d'autres outils pour améliorer sa fonctionnalité. Méthode 1: combinant d'abord le programme de langue C et le pipeline, écrivez un programme C pour appeler la fonction readdir et sortir le résultat: # include # include # include # includeIntmain (intargc, char * argv []) {dir * dir; structDirent * entrée; if (argc! = 2) {

La configuration du pare-feu d'un serveur de courrier Debian est une étape importante pour assurer la sécurité du serveur. Voici plusieurs méthodes de configuration de pare-feu couramment utilisées, y compris l'utilisation d'iptables et de pare-feu. Utilisez les iptables pour configurer le pare-feu pour installer iptables (sinon déjà installé): Sudoapt-getUpDaSuDoapt-getinstalliptableView Règles actuelles iptables: Sudoiptable-L Configuration

Ce guide vous guidera pour apprendre à utiliser Syslog dans Debian Systems. Syslog est un service clé dans les systèmes Linux pour les messages du système de journalisation et du journal d'application. Il aide les administrateurs à surveiller et à analyser l'activité du système pour identifier et résoudre rapidement les problèmes. 1. Connaissance de base de Syslog Les fonctions principales de Syslog comprennent: la collecte et la gestion des messages journaux de manière centralisée; Prise en charge de plusieurs formats de sortie de journal et des emplacements cibles (tels que les fichiers ou les réseaux); Fournir des fonctions de visualisation et de filtrage des journaux en temps réel. 2. Installer et configurer syslog (en utilisant RSYSLOG) Le système Debian utilise RSYSLOG par défaut. Vous pouvez l'installer avec la commande suivante: SudoaptupDatesud
