Comment Installer le Nouveau LLM Apple Ferret sur son Mac
Apple Ferret dans un Mac avec DALL‱E

DĂ©veloppĂ© en collaboration avec l’UniversitĂ© Cornell, Apple a prĂ©sentĂ© trĂšs discrĂštement sur GitHub, son tout premier modĂšle de LLM, Ferret. Bien aprĂšs OpenAI, Meta ou encore Google, Apple se lance donc, Ă  son tour, dans la course aux LLM. L’approche est toutefois diffĂ©rente. Open source et multimodal, ce modĂšle combine vision par ordinateur et traitement du langage naturel, offrant des capacitĂ©s uniques en termes de comprĂ©hension et d’analyse du texte et des images. Plus puissant que GPT-4 d’OpenAI au dire d’Apple, cette avancĂ©e promet d’enrichir les appareils de la firme, notamment en amĂ©liorant l’interprĂ©tation des donnĂ©es et peut-ĂȘtre mĂȘme de Siri.

Ironie du sort, bien qu’Apple ait arrĂȘtĂ© d’utiliser et de supporter les produits de NVIDIA depuis 2016, son modĂšle Ferret a Ă©tĂ© dĂ©veloppĂ© en utilisant les cartes graphiques trĂšs performantes de NVIDIA, les A100. Le code source disponible sur GitHub ne fonctionne donc pas sur les produits de la Pomme.

Voyons comment y remĂ©dier et testons les capacitĂ©s et la rĂ©activitĂ© de cette toute premiĂšre version de Ferret sur nos machines “Designed by Apple”.



CUDA, MPS et Prérequis

La plus grande adhĂ©rence du code de Ferret rĂ©side dans son utilisation de CUDA, le framework pour GPU de NVIDIA. Heureusement, la librairie utilisĂ©e est PyTorch qui a Ă©tĂ© portĂ©e et optimisĂ©e pour les GPU Apple Silicon. Le portage vers l’API Metal d’Apple et son framework Metal Performance Shaders (MPS) sera d’autant plus simple.

L’autre point Ă  noter est la documentation sommaire sur l’installation et l’utilisation de Ferret sur le site de GitHub, preuve s’il en est, qu’Apple rĂ©serve son modĂšle LLM uniquement aux chercheurs comme le prĂ©cise ses conditions d’utilisation.

Alors cherchons ensemble comment faire tourner ce Ferret sur nos Mac. Pour cela, gardons en tĂȘte qu’une quantitĂ© substantielle de mĂ©moire GPU est nĂ©cessaire. Nos tests ont Ă©tĂ© rĂ©alisĂ©s sur un MacBook Pro M1 Max dotĂ© de 64 Go de mĂ©moire.


Installation de Ferret

Étape 1 : Configurer Git

Commencez par installer Git Large File Storage (LFS) pour gérer les tailles importantes des fichiers dont nous allons avoir besoin :

brew install git-lfs
git lfs install
Shell

Étape 2 : TĂ©lĂ©charger le Code Source de Ferret

J’ai adaptĂ© le code de Ferret pour les processeurs Silicon et le framework Metal Performance Shaders (MPS) d’Apple. Il est disponible sur ce repo :

  • La branche main contient le code d’origine d’Apple.
  • La branche silicon contient ma version adaptĂ©e.

Cette structuration facilite la comparaison entre les deux versions.

Pour télécharger le code :

git clone https://github.com/jeanjerome/ml-ferret
cd ml-ferret
git switch silicon
Shell

Étape 3 : CrĂ©er un Environnement Virtuel Python

Ferret utilise Python, donc créons un environnement virtuel avec Conda pour isoler les dépendances :

conda create -n ferret python=3.10 -y
conda activate ferret
Shell

Installez ensuite les dépendances nécessaires :

pip install --upgrade pip
pip install -e .
pip install pycocotools
pip install protobuf==3.20.0
Shell

Étape 4 : Installer le Modùle Vicuna

Placez le modÚle Vicuna dans le répertoire ./model à la racine du projet :

mkdir -p ./model
git lfs install
git clone https://huggingface.co/lmsys/vicuna-13b-v1.3 model/vicuna-13b-v1.3
Shell

Patientez pendant le téléchargement du modÚle.

Étape 5 : TĂ©lĂ©charger les Poids de Ferret

Apple fournit un fichier avec les différences entre les poids de Vicuna et Ferret. Téléchargez-les :

mkdir -p ./delta
curl -o ./delta/ferret-13b-delta.zip https://docs-assets.developer.apple.com/ml-research/models/ferret/ferret-13b/ferret-13b-delta.zip
unzip ./delta/ferret-13b-delta.zip -d ./delta
Shell

Cette Ă©tape peut prendre un peu de temps.

Étape 6 : Transformer Vicuna en Ferret

Pour appliquer les modifications de Ferret sur Vicuna :

python -m ferret.model.apply_delta \
  --base ./model/vicuna-13b-v1.3 \
  --target ./model/ferret-13b-v1-3 \
  --delta ./delta/ferret-13b-delta
Shell

Suivez les logs pour confirmer le bon dĂ©roulement de l’opĂ©ration :

/opt/homebrew/Caskroom/miniconda/base/envs/ferret/lib/python3.10/site-packages/bitsandbytes/cextension.py:34: UserWarning: The installed version of bitsandbytes was compiled without GPU support. 8-bit optimizers, 8-bit multiplication, and GPU quantization are unavailable.
warn("The installed version of bitsandbytes was compiled without GPU support. "
'NoneType' object has no attribute 'cadam32bit_grad_fp32'
Loading base model
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████| 3/3 [00:04<00:00,  1.57s/it]
Loading delta
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████| 3/3 [00:08<00:00,  2.94s/it]
Applying delta
Applying delta: 100%|█████████████████████████████████████████████████████████████| 421/421 [00:16<00:00, 26.04it/s]
Saving target model
Log

Vous venez d’installer Ferret sur votre Mac !


Lancement de la démo de Ferret

La dĂ©mo fournie par Apple permet d’apprĂ©cier les capacitĂ©s du nouveau modĂšle via une interface web.

Ce dĂ©monstrateur inclut un contrĂŽleur, un serveur web Gradio et un worker de modĂšle qui charge les poids et effectue l’infĂ©rence.

Lancez la démo avec ces commandes dans trois terminaux séparés :

Étape 7 : Premier Terminal

DĂ©marrez le contrĂŽleur :

conda activate ferret
python -m ferret.serve.controller --host 0.0.0.0 --port 10000
Shell

Attendez le message indiquant que le contrÎleur est opérationnel : Uvicorn running on http://0.0.0.0:10000 (Press CTRL+C to quit)

DĂ©marrage du contrĂŽleur
DĂ©marrage du contrĂŽleur

Étape 8 : Deuxiùme Terminal

Lancez le serveur web :

conda activate ferret
python -m ferret.serve.gradio_web_server --controller http://localhost:10000 --model-list-mode reload --add_region_feature
Shell

Attendez que s’affiche la ligne Running on local URL: http://0.0.0.0:7860 :

DĂ©marrage de l'interface Web
DĂ©marrage de l'interface Web

Étape 9 : Troisiùme Terminal

Exécutez le worker de modÚle :

conda activate ferret
python -m ferret.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path ./model/ferret-13b-v1-3 --add_region_feature
Shell

Surveillez les logs pour vérifier que tout fonctionne correctement : Uvicorn running on http://0.0.0.0:40000 (Press CTRL+C to quit)

DĂ©marrage du ModĂšle
DĂ©marrage du ModĂšle

Étape 10 : AccĂ©der Ă  la dĂ©mo

Cliquez sur l’adresse http://localhost:7860/ pour accĂ©der Ă  l’interface web de la dĂ©mo.

Interface du démonstrateur Ferret
Interface du démonstrateur Ferret

Test de la démo

Apple a inclus des tests avec images et prompts pré-remplis pour évaluer Ferret.

Testons-les !

Test 1 : Le chien et les furets

  • SĂ©lectionnez la premiĂšre image (le chien blanc) dans Examples.
  • Dans Referring Input Type, choisissez Sketch.
  • Dessinez sur le chien et le furet dans Image & Sketch.
  • Cliquez enfin sur le bouton Soumettre en face du prompt What’s the relationship between object [region0] and object [region1]?
Test du chien et des furets
Test du chien et des furets

Les rĂ©ponses varient, mais restent cohĂ©rentes avec l’image et dĂ©pendent sans doute des pixels sĂ©lectionnĂ©s :

  • Essai 1 : The object [497, 303, 791, 658] is a dog, and it’s standing next to another dog [307, 507, 459, 690]. They seem to be enjoying their time together in the snow.
  • Essai 2 : The object [457, 283, 817, 701] is a dog, and the object [318, 498, 464, 707] is a ferret. The dog and the ferret appear to be sitting together in the snow, suggesting a friendly interaction or companionship.

Limitations

Ferret peut consommer beaucoup de mĂ©moire, et il peut ĂȘtre nĂ©cessaire de redĂ©marrer le worker de modĂšle entre deux tests. Sur mon MacBook M1 Max et ses 64 Go, 62 Go de RAM Ă©taient utilisĂ©es, 2 Go de fichiers mis en cache et 20 Go pour le fichier d’échange.

Test 2 : Le ponton sur le lac

  • SĂ©lectionnez la deuxiĂšme image (le ponton).
  • Sans dessiner, soumettez le prompt en cliquant sur le bouton Soumettre en face du prompt What are the things I should be cautious about when I visit here? Tell me the coordinates in response.
Test du ponton sur le lac
Test du ponton sur le lac
  • RĂ©sultat : When you’re on the dock [218, 535, 810, 993], you should be mindful of a few things. Firstly, the water [0, 518, 998, 997] is a crucial aspect, and you should be careful not to go too close to the edge [731, 543, 998, 591]. Secondly, the surrounding trees [875, 366, 940, 510] [707, 385, 757, 535] [650, 393, 695, 529] [512, 420, 540, 526] [775, 375, 818, 522] could pose a hazard if you’re not cautious. Lastly, it’s important to be aware of the path [218, 535, 810,] to ensure you stay on the right track to avoid any unintentional falls or injuries.

Test 3 : Le salon

  • Choisissez la troisiĂšme image (le salon).
  • Soumettez le prompt sans dessiner en cliquant sur le bouton Soumettre en face du prompt Describe the image in details.
  • Ferret commence Ă  nous rĂ©pondre

Test du salon
Test du salon
  • RĂ©sultat :
    • Ferret rĂ©dige lentement sa rĂ©ponse. On sent qu’il se sent Ă  l’étroit dans les 64 Go de RAM.
    • Il parvient tout mĂȘme Ă  rĂ©diger ceci : The image depicts a cozy living room [12, 1, 982, 989] with various pieces of furniture [490, 588, 709, 883] and decorations [244, 27, 394, 110] [247, 28, 274, 109] [378, 43, 411, 108]. In the center, there is a colorful, multicolored rug [90, 689, 746, 994] on the floor. A flat-screen TV [1, 394, 93, 723] is mounted on the left wall, with remotes [5, 679, 60, 734] placed nearby. Two couches [513, 421, 938, 769] [501, 577, 993, 995] are arranged in the room, with one along the right wall and another on the far end of the room. A few chairs are also present, scattered around the room. A dining table [710, 392, 954, 511] [
    • Avant de planter lamentablement avec un NETWORK ERROR DUE TO HIGH TRAFFIC. PLEASE REGENERATE OR REFRESH THIS PAGE. (error_code: 1)
    • Dans les logs, on peut lire : Caught Unknown Error MPS backend out of memory (MPS allocated: 26.50 GB, other allocations: 55.14 GB, max allowed: 81.60 GB). Tried to allocate 10.00 KB on private pool. Use PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0 to disable upper limit for memory allocations (may cause system failure).

Pas de solution donc pour mon MacBook Pro, les 80 Go occupés par Ferret ne suffisent pas


Bilan des Tests

AprĂšs cette sĂ©rie de tests, il est clair que Ferret dĂ©montre une capacitĂ© impressionnante Ă  analyser et dĂ©crire une image et Ă  le retranscrire en langage naturel, offrant de nouvelles possibilitĂ©s. Cependant, il est Ă©galement apparu que Ferret peut ĂȘtre sujet Ă  des problĂšmes de consommation Ă©levĂ©e de mĂ©moire, particuliĂšrement lors de traitements prolongĂ©s, entraĂźnant des lenteurs notables lorsque la mĂ©moire commence Ă  ĂȘtre compressĂ©e, voire des plantages.

Ressources consommées par Ferret
Ressources consommées par Ferret

Lorsque Ferret fonctionne normalement, l’utilisation du GPU atteint des pics allant jusqu’à 90%, signe que l’activitĂ© du rĂ©seau de neurones a bien lieu dans cette partie du SoC (System on Chip). Par contraste, l’activitĂ© du CPU se maintient Ă  un niveau stable, autour de 20%.

Cependant, l’analyse du suivi des consommations de ressources de Ferret rĂ©vĂšle que les pĂ©riodes de ralentissement dans les rĂ©ponses du modĂšle coĂŻncident avec les phases de compression de la mĂ©moire en RAM. L’activitĂ© du GPU baisse alors aux alentours de 20% tandis que celle du CPU se maintient autour de 20%. Le problĂšme semble donc rĂ©sider dans la mĂ©moire, et on peut penser que le systĂšme effectue du swapping ou compresse/dĂ©compresse la mĂ©moire faute de suffisamment de RAM disponible pour le modĂšle et ses traitements.


Optimisation du ModĂšle Ferret pour les Appareils Apple

Suite Ă  l’analyse de l’installation et des essais du format 13B, il devient Ă©vident qu’Apple doit relever le dĂ©fi d’adapter son modĂšle pour le faire fonctionner de façon optimale sur ses Macs et ses iPhones. Pour cela, Apple envisagerait diverses stratĂ©gies, selon les rumeurs et les informations disponibles sur internet. Certaines de ces stratĂ©gies sont dĂ©jĂ  bien Ă©tablies, tandis que d’autres proviennent directement de ses laboratoires de recherche :

Quantification du ModĂšle (Quantization)

La quantification rĂ©duit la prĂ©cision des poids du modĂšle, diminuant ainsi sa taille et sa consommation de ressources sans compromettre significativement la performance des prĂ©dictions. Alors que les modĂšles traditionnels peuvent utiliser des poids reprĂ©sentĂ©s par des nombres Ă  virgule flottante de 32 bits (float32), la quantification rĂ©duit cette prĂ©cision Ă  des formats plus compacts, tels que 16 bits (float16) ou mĂȘme 8 bits (int8). Cela est particuliĂšrement avantageux pour les iPhones, oĂč l’espace de stockage et la capacitĂ© de calcul sont plus limitĂ©s qu’un Mac.

La disponibilitĂ© d’une version 7B de Ferret en est l’illustration.

Installation de la Version 7B de Ferret

Si vous avez dĂ©jĂ  suivi les Ă©tapes pour installer le format 13B de Ferret, l’installation de la version 7B sera grandement simplifiĂ©e. La majoritĂ© des Ă©tapes d’installation restent identiques, Ă  une exception prĂšs : il n’est pas nĂ©cessaire de recrĂ©er un environnement virtuel. Pour installer Ferret 7B, relancez les commandes en remplaçant tous les 13 par des 7.

Sparsification et Élagage (Pruning) du Modùle

Ce sont deux techniques liées de compression de modÚle. Elles visent à optimiser les réseaux de neurones en réduisant leur complexité, par exemple en diminuant le nombre de neurones ou en supprimant des connexions ayant des poids proches de zéro sans compromettre significativement les performances.

Distillation du ModĂšle

C’est une technique d’optimisation de modĂšles. Elle consiste Ă  transfĂ©rer la connaissance d’un grand modĂšle complexe (le modĂšle “professeur”) Ă  un modĂšle plus petit et plus simple (le modĂšle â€œĂ©tudiant”). L’objectif est d’apprendre au modĂšle Ă©tudiant Ă  reproduire les performances du modĂšle professeur tout en Ă©tant plus lĂ©ger et rapide Ă  exĂ©cuter et en prĂ©servant la qualitĂ© des prĂ©dictions.

Déploiement Fractionné (Split)

C’est une mĂ©thode oĂč les tĂąches de calcul d’un modĂšle sont partagĂ©es entre les appareils locaux et le cloud. Cette approche permet de tirer parti des capacitĂ©s de calcul du cloud pour les opĂ©rations lourdes tout en effectuant des tĂąches plus lĂ©gĂšres localement. Cependant, cette stratĂ©gie semble peu probable pour Apple, qui privilĂ©gie des solutions entiĂšrement locales ou des optimisations internes. Apple vise Ă  maintenir la confidentialitĂ© et la sĂ©curitĂ© des donnĂ©es de l’utilisateur en minimisant la dĂ©pendance au cloud.

Utilisation Avancée de la Mémoire Flash

Dans un article rĂ©cemment publiĂ© par des chercheurs de la Pomme LLM in a flash: Efficient Large Language Model Inference with Limited Memory on peut voir qu’Apple envisage d’utiliser la mĂ©moire flash pour stocker les paramĂštres des modĂšles. Ces paramĂštres sont ensuite dynamiquement transfĂ©rĂ©s vers la DRAM lors de l’infĂ©rence, rĂ©duisant ainsi le volume de donnĂ©es Ă©changĂ©es et accĂ©lĂ©rant le traitement sur des dispositifs avec peu de DRAM, comme les iPhones. Cette approche, combinĂ©e Ă  l’utilisation de techniques de gestion de donnĂ©es innovantes, telles que le fenĂȘtrage (windowing) et le regroupement lignes-colonnes (row-column bundling), optimise encore davantage la quantitĂ© de donnĂ©es Ă  transfĂ©rer et indirectement la vitesse d’infĂ©rence.


Conclusion

En rĂ©sumĂ©, l’intĂ©gration de Ferret, le dernier-nĂ© des modĂšles LLM d’Apple, sur les machines Ă©quipĂ©es de processeurs Apple Silicon, reprĂ©sente une avancĂ©e notable dans le domaine de l’intelligence artificielle. MalgrĂ© quelques dĂ©fis inhĂ©rents Ă  l’adaptation du code initial, conçu pour les GPU NVIDIA, les efforts de portage vers l’architecture Metal d’Apple ont Ă©tĂ© trĂšs simples.

Cette avancée soulÚve des questions passionnantes sur la maniÚre dont Apple exécutera son modÚle de langage multimodal sur des appareils aux ressources plus limitées comme les iPhones.

Nul doute qu’Apple a dĂ©jĂ  trouvĂ© le moyen de faire fonctionner son Ferret sur ses iPhones, en exploitant des techniques d’optimisation avancĂ©es. La capacitĂ© d’Apple Ă  adapter de maniĂšre efficace des technologies de pointe Ă  ses appareils montre leur maĂźtrise de l’IA dans leur Ă©cosystĂšme matĂ©riel et logiciel. Il sera intĂ©ressant de voir comment ces dĂ©veloppements influenceront l’expĂ©rience utilisateur dans nos iPhones et Macs et quels seront les nouveaux usages qu’Apple introduira dans notre quotidien. Les rumeurs parlent d’une interface utilisateur complĂštement renouvelĂ©e dans iOS 18 ! Nous en saurons sĂ»rement plus lors de la WWDC 2024 en juin prochain.

Les +

Avantages de FerretDescription
Capacités MultimodalesCombinaison de la vision par ordinateur et du traitement du langage naturel pour une compréhension et une analyse enrichies du texte et des images.
Performance AmélioréeCapacité à exécuter des tùches complexes avec une efficacité accrue.
Interaction Utilisateur OptimisĂ©eAmĂ©lioration de l’interaction avec les utilisateurs grĂące Ă  une meilleure comprĂ©hension du langage naturel, de l’environnement extĂ©rieur et Ă  des rĂ©ponses plus prĂ©cises.
Potentiel d’InnovationOuverture vers de nouvelles possibilitĂ©s pour des applications innovantes dans divers domaines tels que la traduction, l’assistance vocale, la rĂ©alitĂ© augmentĂ©e et la rĂ©alitĂ© virtuelle.

Les -

Inconvénients de FerretDescription
ComplexitĂ© TechniqueLa mise en Ɠuvre et l’optimisation du modĂšle peuvent ĂȘtre complexes pour une utilisation sur des iPhones.
Besoins en RessourcesMĂȘme optimisĂ©, le modĂšle nĂ©cessitera toujours des ressources significatives en termes de traitement et de mĂ©moire.
Limites d’IntĂ©grationL’intĂ©gration avec l’écosystĂšme existant d’applications iOS pourrait ĂȘtre une vrai dĂ©fis.
Consommation d’ÉnergieL’utilisation avancĂ©e d’IA peut entraĂźner une augmentation de la consommation d’énergie, affectant l’autonomie de la batterie.
ProblĂšmes de ConfidentialitĂ©La gestion des donnĂ©es et la confidentialitĂ© peuvent ĂȘtre des prĂ©occupations, en particulier dans les applications sensibles Ă  la vie privĂ©e.

Usages

Fonctionnalité Potentielle de Ferret dans iOS et MacOSDescription et Impact
Traduction InstantanĂ©eAmĂ©lioration significative de la traduction de textes en temps rĂ©el grĂące aux capacitĂ©s avancĂ©es d’apprentissage profond. Peut s’intĂ©grer Ă  toutes les Apps de Safari Ă  Pages.
Assistant Vocal OptimiséAmélioration de Siri (enfin !) pour une meilleure compréhension du langage naturel et des interactions plus naturelles et efficaces.
RĂ©alitĂ© AugmentĂ©e et VirtuelleEnrichissement des expĂ©riences de rĂ©alitĂ© augmentĂ©e et virtuelle via une analyse d’image et de scĂšne plus sophistiquĂ©e dans les Apps Photos et Appareil photo.
Assistance gĂ©nĂ©rative de texte et d’imagesExtraction des paroles dans Apple Music (avec traduction), aide Ă  la gĂ©nĂ©ration de texte et d’images dans Apple Pages et Keynote ou encore assistant de code dans Xcode.
Jean-Jerome Levy

Ecrit par

Jean-JĂ©rĂŽme LĂ©vy

Consultant DevOps

Professionnel chevronnĂ© dans le domaine de l’informatique, cumulant plus de 20 annĂ©es d’expĂ©rience au sein de DSI de grandes entreprises, mon expertise diversifiĂ©e m’a permis de jouer un rĂŽle clĂ© dans de nombreux projets, caractĂ©risĂ©s par la mise en place de pratiques DevOps innovantes.