17 points par GN⁺ 2024-03-08 | 1 commentaires | Partager sur WhatsApp
  • Open source combinant FSDP (Fully Sharded Data Parallel) et QLoRA (Quantization + Low-Rank Adaptation)
  • Permet d’affiner efficacement un modèle de langage de taille 70B avec un ordinateur de bureau classique et deux GPU de gaming standard

Contexte

  • Malgré un écart de performances limité entre le matériel de niveau datacenter et les GPU de gaming intégrés aux PC de bureau, l’écart de prix est énorme
  • Les GPU de gaming ont peu de mémoire, ce qui rend l’entraînement de grands modèles de langage difficile
  • Answer.AI cherche à résoudre ce problème en trouvant un moyen d’entraîner les meilleurs modèles open source avec des GPU de gaming abordables

QLoRA : entraîner de plus grands modèles sur un seul GPU

  • QLoRA combine quantification et LoRA, en réduisant les poids du modèle à 4 bits afin de diminuer l’utilisation de mémoire GPU.
  • LoRA évite les contraintes mémoire en ajoutant de petites matrices d’adaptation à entraîner, au lieu d’entraîner l’intégralité du grand modèle de langage.
  • QLoRA permet d’entraîner un modèle 65B sur une carte de 48GB, mais cela reste insuffisant pour entraîner un modèle 70B sur un GPU de gaming de 24GB.

FSDP : passer à l’échelle avec plusieurs GPU

  • FSDP (Fully Sharded Data Parallel) répartit les paramètres du modèle sur plusieurs GPU afin de pouvoir les utiliser simultanément.
  • FSDP permet d’appliquer les performances de DDP (Distributed Data Parallel) à des modèles trop grands pour tenir sur un seul GPU.
  • Par exemple, un modèle 70B (70 milliards de paramètres) non quantifié utilise 140GB de RAM (chaque paramètre étant stocké sur 16 bits, soit 2 octets), ce qui dépasse même la capacité d’une carte NVIDIA H100 (environ 40�00 $ l’unité), limitée à 80GB de RAM.
    • En revanche, avec FSDP, on peut combiner 4 GPU H100 pour obtenir un total de 320GB de RAM. Et économiser 150000 $.

Combiner FSDP et QLoRA

  • Answer.AI réduit la taille du modèle avec QLoRA, puis le répartit sur plusieurs cartes de gaming de 24GB via FSDP afin de permettre un entraînement efficace.
  • Cela permet d’entraîner un modèle 70B avec deux GPU de gaming classiques.
  • Après avoir discuté de l’idée de combiner FSDP et QLoRA à la fin de 2023, l’équipe a résolu les problèmes nécessaires à sa mise en œuvre.
  • Diverses technologies et bibliothèques ont été combinées au cours de ce processus
    • stockage des paramètres quantifiés dans le même type de données que le "Computation Type" du modèle
    • gradient checkpointing, qui au lieu de stocker l’ensemble des gradients, enregistre les activations à plusieurs « points de contrôle » du modèle complet, puis réexécute au besoin l’étape de calcul forward pour recalculer les gradients
    • CPU offloading, qui stocke les poids en RAM CPU plutôt que sur le GPU lorsqu’ils ne sont pas utilisés, réduisant fortement la mémoire GPU nécessaire
    • Flash Attention 2 : calcule efficacement l’attention à l’aide de kernels Cuda optimisés pour la mémoire
    • découverte de HQQ (Half-Quadratic Quantization) et intégration avec FSDP (50 fois plus rapide et plus précis que GPTQ)

Comment utiliser FSDP/QLoRA

  • L’utilisation de FSDP nécessite au moins deux GPU. (Sur Runpod, un boîtier double 3090 est disponible pour 0,6 $/heure)
  • Installez les dernières versions de Transformers, PEFT, Bitsandbytes (et HQQ si vous l’utilisez), clonez le dépôt d’Answer.AI, puis suivez le README pour l’exécution.
  • Pour entraîner Alpaca sur 2 cartes de 24GB :
    python train.py --train_type qlora --dataset alpaca --batch_size 8 --gradient_accumulation_steps 2 --output_dir qlora_output --log_to wandb
  • Le projet en est encore à un stade précoce (alpha/preview)
  • Des résultats de benchmark devraient également être publiés dans les prochaines semaines

L’avis de GN⁺

  • Cet article intéressera fortement les personnes travaillant dans l’IA et le machine learning. Il mérite particulièrement l’attention, car il propose une nouvelle manière d’entraîner efficacement de grands modèles de langage.
  • Si cette technologie est utilisée avec succès à grande échelle, elle pourrait fortement abaisser la barrière de coût de la recherche et du développement en IA. Cela pourrait aussi représenter une grande opportunité pour les petits laboratoires ou les développeurs individuels.
  • Toutefois, pour qu’une telle approche soit réellement adoptée à grande échelle, la stabilité et la facilité d’utilisation seront des facteurs clés. Comme il s’agit encore d’un stade précoce, le système devra être amélioré grâce aux tests et retours de la communauté.
  • Lorsqu’on adopte une nouvelle technologie, il faut toujours prendre en compte la compatibilité avec les systèmes existants, les performances et les coûts. Le principal avantage ici est de rendre l’entraînement de grands modèles plus accessible, mais comme le projet n’en est qu’à ses débuts, il peut encore présenter des inconvénients en matière de stabilité et de support.

1 commentaires

 
GN⁺ 2024-03-08
Avis Hacker News
  • L’article est excellent, mais c’est dommage qu’il ait raté autant d’occasions d’utiliser le mot « nibble ».

    • L’article est intéressant, mais regrette de ne pas avoir exploité le terme « nibble ».
  • En tant que consommateur, j’aimerais voir un tableau indiquant combien de temps il faut pour affiner un modèle 70b avec un système utilisant des poids en 4 bits, par exemple avec la taille du modèle, la taille d’entraînement, le coût d’entraînement et la perte de qualité attendue avec cette technique.

    • Exprime un intérêt pour le coût final du fine-tuning et demande des informations détaillées, notamment la taille du modèle et le coût d’entraînement.
  • Je me demande s’il est possible d’appliquer un encodage (-1,0,1). Quand ce modèle sortira, est-ce qu’answer.ai pourra utiliser la même technique pour affiner de grands modèles avec deux petits GPU, et j’aimerais aussi voir une analyse coûts/bénéfices.

    • Soulève une question sur l’applicabilité d’une nouvelle technique d’encodage et demande une analyse du rapport coût/efficacité.
  • Ce type de recherche est extrêmement utile pour permettre aux utilisateurs individuels de rivaliser sur le marché des LLM. C’est un excellent travail qui va dans le même sens que le livre « De zéro à un ».

    • Évalue positivement cette recherche pour son utilité auprès des utilisateurs individuels et sa contribution à la résolution d’un problème précis.
  • L’article ne mentionne pas que tous les meilleurs projets du défi efficacité de NeurIPS utilisaient QLoRA, alors que c’est un très bon exemple de l’importance et de l’utilité de QLoRA.

    • Souligne l’importance et l’utilité de la technique QLoRA, en rappelant qu’elle a été reconnue dans une compétition.
  • C’est l’approche la plus intéressante et la plus constructive que j’aie vue dans les LLM « open source ». J’aimerais que le monde académique en fasse aussi un standard.

    • Fait l’éloge de cette approche des LLM open source et souhaite qu’elle soit adoptée comme standard dans le milieu académique.
  • J’aimerais qu’un entraînement rapide sur Metal arrive plus tôt. Pour l’instant, le Mac Studio est bien moins cher et suffisamment rapide pour l’inférence sur de grands modèles, mais il n’existe quasiment aucune solution d’entraînement.

    • Exprime l’espoir de voir arriver un entraînement rapide sur la plateforme Metal et commente l’efficacité actuelle du Mac Studio.
  • La qualité et la clarté de la rédaction technique sont excellentes.

    • Fait l’éloge de la qualité et de la clarté de la documentation technique.
  • Je me demande s’il est possible de réentraîner les poids d’un LLM (70B) avec mes propres données.

    • Pose une question sur la possibilité de réentraîner un LLM avec des données personnelles.
  • Pour ceux qui affinent des LLM avec un budget matériel limité, c’est une avancée majeure.

    • Considère cette technologie comme un grand progrès pour les utilisateurs disposant d’un budget matériel restreint.
  • Je me demande pourquoi DeepSpeed a été choisi plutôt que FSDP.

    • Exprime sa curiosité quant au choix entre FSDP et DeepSpeed.
  • Je me demande s’il y avait des outils utilisés pour le réglage des performances une fois qu’il est devenu possible d’affiner le modèle.

    • Pose une question sur les outils utilisés pour l’optimisation des performances.
  • Avez-vous déjà essayé la sparsification ? J’ai l’impression que cela pourrait permettre le fine-tuning avec moins de RAM.

    • Donne un avis sur l’utilisation de la sparsification et sur son potentiel pour réduire les besoins en RAM lors du fine-tuning.