De quoi s'agit-il
QLoRA, abréviation de LoRA quantifié, combine deux idées. La quantification stocke chaque nombre sur moins de bits. LoRA gèle le modèle de base et entraîne un petit adaptateur à ses côtés. Comme la base est gelée, elle n'a jamais besoin de gradients ou d'état d'optimiseur, elle peut donc être stockée de manière compacte ; seul l'adaptateur doit rester dans une précision adaptée à l'apprentissage. QLoRA conserve la base gelée en 4 bits, soit un quart des 16 bits habituels, et entraîne le même adaptateur LoRA par-dessus en 16 bits.
Il a été introduit par Dettmers et al. en 2023. Leur article a permis d'effectuer le réglage fin d'un modèle de 65 milliards de paramètres sur un seul GPU de 48 Go, là où un réglage fin classique en 16 bits aurait nécessité plus de 780 Go, tout en préservant les performances de tâche du réglage fin en 16 bits.
Comment ça marche
Un poids de 16 bits occupe 2 octets ; un poids de 4 bits en occupe un demi. Compresser un modèle entraîné à ce point sans le détériorer repose sur trois éléments de l'article :
- NormalFloat 4 bits (NF4). Les poids entraînés suivent approximativement une courbe en cloche centrée sur zéro. Le NF4 place ses 16 valeurs possibles pour épouser cette forme, de sorte qu'un plus grand nombre d'entre elles se trouvent là où se situe la majorité des poids. Dans l'article, il a surpassé les entiers 4 bits et les flottants 4 bits ordinaires.
- Double quantification. Les poids sont quantifiés en petits blocs, chacun ayant sa propre constante de mise à l'échelle, et ces constantes s'additionnent. QLoRA quantifie également les constantes, réduisant leur coût d'environ 0,5 à environ 0,13 bit par poids : soit environ 3 Go économisés sur un modèle 65B.
- Optimiseurs paginés. Lorsqu'un exemple long provoque un pic de mémoire soudain, l'état de l'optimiseur est temporairement déplacé vers la mémoire ordinaire du processeur au lieu de faire planter l'exécution.
Pendant les passes avant et arrière, les poids en 4 bits de chaque couche sont décompressés (déquantifiés) en 16 bits, utilisés pour l'arithmétique de cette couche, puis supprimés. Les gradients circulent à travers la base gelée vers l'adaptateur, qui est la seule partie à changer. À tout moment, la mémoire contient l'ensemble du modèle en 4 bits plus l'équivalent d'une couche de poids en 16 bits.
bytes per weight of the frozen base
16-bit (bf16) 2 bytes
4-bit NF4 + double-quantised constants ≈ 0.52 bytes (≈ 4.13 bits)
an 8B model, frozen base only
16-bit 8 × 10⁹ × 2 bytes ≈ 16 GB
4-bit 8 × 10⁹ × 0.52 bytes ≈ 4.1 GB- LoRA sur une base en 16 bits : environ 16 Go uniquement pour les poids gelés. Avec l'adaptateur, l'état de son optimiseur et les activations, une règle empirique courante donne environ 19 Go. Cela ne tient pas.
- QLoRA : la base est réduite à environ 4–5 Go. Quelques éléments, comme les couches de normalisation et souvent les couches d'intégration et de sortie, restent généralement en 16 bits. Avec l'adaptateur et la mémoire de travail, le total est d'environ 9 Go, ce qui tient avec de la marge.
- L'adaptateur est exactement de la même taille qu'un adaptateur LoRA de même rang : quelques dizaines de Mo.
- Le compromis : chaque étape est un peu plus lente, car chaque couche est décompressée à la volée.
| Modèle | LoRA (base 16 bits) | QLoRA (base 4 bits) |
|---|---|---|
| 8B | ~19 Go | ~9 Go |
| 14B | ~33 Go | ~13 Go |
| 27–32B | ~60–70 Go | ~22–26 Go |
Il s'agit des totaux pour l'entraînement, incluant la mémoire de travail, c'est pourquoi ils se situent au-dessus des 4–5 Go indiqués sur la page du réglage fin complet pour la base en 4 bits d'un modèle 7B avant les activations. Un ordinateur portable de 36 Go avec mémoire partagée, disposant d'environ 27 Go libres une fois la part du système d'exploitation déduite, peut entraîner un modèle 27–32B avec QLoRA, contre environ 10B avec le LoRA classique.
Ce que cela coûte, et quand l'utiliser
- Vitesse. Décompresser chaque couche à chaque étape ajoute du travail, l'entraînement est donc un peu plus lent qu'avec LoRA sur le même modèle.
- Qualité. Les résultats sont très proches de ceux de LoRA. L'article a égalé le réglage fin en 16 bits sur l'ensemble de ses tests de référence ; de légères différences peuvent toutefois apparaître lors de votre propre évaluation, il est donc préférable de comparer avec un cycle d'évaluation plutôt que de faire des suppositions.
- Le résultat. Il s'agit toujours d'un adaptateur. Chargez-le sur le modèle de base normal en 16 bits ou sur sa copie en 4 bits ; la taille de l'adaptateur lui-même ne change pas.
- Quand l'utiliser. Utilisez QLoRA lorsque le modèle souhaité est trop volumineux pour LoRA. S'il est adapté, le LoRA classique est plus rapide pour un résultat identique.
Les paramètres
Détermine si le modèle de base gelé est chargé en 4 bits. Désactivé, un adaptateur LoRA classique est entraîné sur une base en 16 bits : l'opération est plus rapide à chaque étape, mais nécessite environ trois fois plus de mémoire. Activé, il entraîne QLoRA, la solution idéale lorsque le modèle souhaité ne tiendrait pas en mémoire autrement. Cette option s'applique uniquement aux adaptateurs : un ajustement fin complet modifie chaque poids, qui doit donc conserver une précision permettant l'entraînement.
Le format numérique dans lequel les poids en 4 bits sont décompressés pour les calculs de chaque couche, et le format d'entraînement de l'adaptateur. Le bf16 (bfloat16) conserve la plage des flottants 32 bits sur 16 bits, évitant ainsi presque tout débordement de capacité ; les GPU NVIDIA le prennent en charge à partir de la génération Ampere. Les GPU plus anciens, tels que le T4, effectuent généralement les calculs en fp16, dont la plage est plus restreinte.
Erreurs courantes
- Choisir QLoRA alors que le modèle est déjà adapté à LoRA. Cela ne fait qu'augmenter le temps d'entraînement.
- S'attendre à un fichier de résultat plus petit. L'adaptateur a la même taille qu'un adaptateur LoRA ; seule la mémoire d'entraînement est réduite.
- Essayer d'utiliser QLoRA pour faire tenir un réglage fin complet. Cela ne s'applique qu'aux adaptateurs.
- Partir d'un modèle publié déjà compressé (FP8, MXFP4). QLoRA quantifie lui-même un modèle en pleine précision, il part donc de la version BF16.
- Charger l'adaptateur sur un modèle différent, ou une version différente de celui-ci, que celui sur lequel il a été entraîné.
Références et lectures complémentaires
Les sources externes s'ouvrent dans un nouvel onglet.
- 01QLoRA: Efficient Finetuning of Quantized LLMsDettmers et al., 2023 · arXiv · arxiv.orgL'article original : NF4, double quantification, optimiseurs paginés et le résultat de 65B sur un seul GPU.
- 02Making LLMs even more accessible with bitsandbytes, 4-bit quantization and QLoRAHugging Face blog, 2023 · huggingface.coUn guide pratique et clair sur le chargement en 4 bits et l'entraînement QLoRA.
- 03BitsandbytesHugging Face Transformers docs · huggingface.coLes options de chargement en 4 bits : NF4, double quantification et type de données de calcul.
- 04QuantizationHugging Face PEFT docs · huggingface.co
- 05LLM.int8(): 8-bit Matrix Multiplication for Transformers at ScaleDettmers et al., 2022 · arXiv · arxiv.orgLes travaux antérieurs en 8 bits dont est issue la bibliothèque de quantification de QLoRA.