Introduction
L’exécution locale de modèles d’IA open source sur nos propres ordinateurs nous offre une certaine confidentialité, des possibilités infinies de bricolage et une liberté vis-à-vis des grandes entreprises. C'est presque une question de liberté d'expression.
Cependant, pour nous, pauvres en GPU, avoir notre propre ordinateur IA semble être un rêve coûteux.
Et si je vous disais que vous pouvez obtenir un ordinateur IA utile pour 300 $ ? Intéressé? Vous devez fournir votre propre moniteur, clavier et souris. Et vous avez besoin d'un peu de bricolage sur le système d'exploitation Linux, les pilotes, les middlewares et les configurations.
Pour clarifier, nous ne parlons PAS de « formation » ou de « réglage fin » de grands modèles d’IA générative. Nous nous concentrerons sur la façon d'exécuter un LLM open source (grands modèles de langage tels que
Maintenant, continuons.
Qu’est-ce qui fait un bon (et bon marché) ordinateur IA ?
Supposons que l'un des principaux cas d'utilisation d'un ordinateur IA domestique soit en cours d'exécution
Cependant, vous avez besoin des éléments suivants pour une vitesse d'inférence plus rapide. Sinon, vous aurez l'impression de regarder les cheveux pousser sur votre paume pendant que le LLM crache un jeton à la fois.
- Processeur rapide vers bande passante mémoire
- DRAM plus rapide (au moins DDR4, DDR5 sera encore meilleure)
- Beaucoup de mémoire (comme 16 Go au minimum), surtout si vous souhaitez exécuter des modèles plus gros (au-delà de 7 Go)
Pour la génération d’images avec Stable Diffusion, vous avez besoin de la puissance du GPU. Cependant, vous n’avez pas besoin d’un GPU très sophistiqué pour cela. Vous pouvez exploiter le GPU intégré déjà dans vos ordinateurs personnels :
Tous les Mac équipés d'un processeur M1/M2/M3, qui intègre un processeur, un GPU et une mémoire haute vitesse (ils sont vraiment bons, mais en raison de leur prix, ils sont exclus de cet article particulier)
AMD APU (par exemple Ryzen 7 5700U), qui intègre CPU et GPU pour les mini-PC économiques. Ce sera l’objet de cet article.
CPU Intel (par exemple, Core i5-1135G7), qui intègre également CPU et GPU. Ils sont légèrement supérieurs au budget de 300 $ pour l'ensemble du mini-PC, mais les lecteurs sont invités à les explorer davantage par eux-mêmes.
Et l'ordinateur IA à 300 $ l'est-il ?
Un mini PC basé sur AMD avec les spécifications suivantes se vend généralement à moins de 300 $. Je ne souhaite soutenir aucune marque en particulier, vous pouvez donc rechercher vous-même :
AMD Ryzen 7 5800H (8C/16T, jusqu'à 4,4 GHz)- 16 Go de RAM DDR4 (32 Go recommandés)
- Disque SSD NVME M.2 de 512 Go
J'ai fait un peu de folie et j'ai opté pour le modèle à 400 $ avec 32 Go de RAM et 1 To de SSD (toutes choses étant égales par ailleurs). La raison principale est que je fais des recherches sur les LLM open source et que j'aimerais exécuter des modèles plus gros, en plus d'exécuter Stable Difusion. Mais vous devriez pouvoir faire presque tout ce qui est décrit dans cet article avec l'ordinateur à 300 $.
Préparation 1 : allouer suffisamment de mémoire iGPU
Pour les APU AMD comme le
Vous devez modifier cela en fonction de votre cas d'utilisation principal :
Si vous avez uniquement besoin d'exécuter l'inférence LLM, vous pouvez ignorer toute cette étape de préparation. Étant donné que l'inférence LLM n'aura besoin d'utiliser que le processeur, vous devez économiser la plus grande partie de la RAM pour le processeur afin de pouvoir exécuter des modèles LLM plus grands.
Si tu as besoin de courir
Diffusion stable , en particulierSDXL (1024x1024), vous devez allouer autant de RAM à l'iGPU que le système le permet (généralement la moitié de la RAM totale)
Dans mon cas, je souhaite exécuter à la fois l’inférence Stable Diffusion XL et LLM sur le même mini PC. Par conséquent, je voudrais allouer 16 Go (sur 32 Go au total) au GPU.
Vous pouvez y parvenir en modifiant les paramètres dans le BIOS. En règle générale, il existe une limite supérieure et le paramètre par défaut peut être bien inférieur à la limite supérieure. Sur mon ordinateur, la limite supérieure était de 16 Go, soit la moitié de la RAM totale disponible.
Bon BIOS
Si le BIOS de votre ordinateur prend en charge de tels paramètres, continuez et modifiez le numéro souhaité. Mon BIOS ne dispose pas d'un tel paramètre.
Mauvais BIOS : utilisez l’outil Universal AMD
Si votre BIOS ne dispose pas de ce paramètre, veuillez suivre les instructions « Déverrouiller l'allocation de mémoire GPU sur l'APU AMD Ryzen™ ? » par Winston Ma. Je l'ai essayé et cela a bien fonctionné, donc maintenant j'ai 16 Go de VRAM.
Préparation 2 : Installer les pilotes et le middleware
Alignez les étoiles
AMD
Afin d'installer et de faire fonctionner le ROCm d'AMD, vous devez vous assurer que les versions du matériel GPU, de la distribution Linux, du noyau, de python, du pilote HIP, de la bibliothèque ROCm et de pytorch sont compatibles. Si vous voulez le moins de douleur et un maximum de chances de succès du premier coup, respectez les combinaisons recommandées et vérifiées.
Prérequis
Veuillez consulter le lien suivant pour obtenir les versions compatibles du système d'exploitation Linux et du noyau, et installez-les. Au départ, j'ai commis l'erreur d'installer simplement mon système d'exploitation Linux préféré et mon noyau Linux par défaut, et c'était très pénible de revenir en arrière pour résoudre les problèmes de compatibilité. Vous pouvez éviter cette douleur en utilisant simplement les combinaisons officiellement prises en charge.
Installation du ROCm
Si l'ensemble de l'installation se termine bien, vous pouvez taper rocminfo
, et quelque chose comme ceci s'affichera (je n'ai coupé que les parties les plus pertinentes en surbrillance jaune) :
ROCk module is loaded
=====================
HSA System Attributes
=====================
Runtime Version: 1.1
System Timestamp Freq.: 1000.000000MHz
Sig. Max Wait Duration: 18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count)
Machine Model: LARGE
System Endianness: LITTLE
Mwaitx: DISABLED
DMAbuf Support: YES
==========
HSA Agents
==========
*******
Agent 1
*******
Name: AMD Ryzen 7 5800H with Radeon Graphics
Uuid: CPU-XX
Marketing Name: AMD Ryzen 7 5800H with Radeon Graphics
Vendor Name: CPU
Pool Info:
Pool 1
Segment: GLOBAL; FLAGS: COARSE GRAINED
Size: 16777216(0x1000000) KB
Environnement Python
La dépendance à Python peut être assez délicate, c'est donc une bonne pratique de configurer un environnement approprié. Vous pouvez utiliser soit
-
source venv/bin/activate
-
conda activate llm
Pytorche
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.7
Écrasement HSA
Ce qui suit est spécifique aux APU avec graphiques intégrés. Même s'ils ne sont pas officiellement pris en charge par le ROCm, les éléments suivants se sont avérés efficaces.
export HSA_OVERRIDE_GFX_VERSION=9.0.0
Comment vérifier
Maintenant, après toutes les étapes compliquées, testons si ROCm fonctionne avec Torch. Et vous pouvez voir que ROCm « fait semblant » d'être CUDA pour les besoins de Pytorch.
python3 -c 'import torch' 2> /dev/null && echo 'Success' || echo 'Failure'
Success
python3 -c 'import torch; print(torch.cuda.is_available())'
True
Inférence LLM
Commençons par quelque chose de simple pour notre ordinateur IA à 300 $ nouvellement configuré : exécuter localement un grand modèle de langage. Nous pouvons choisir l’un des modes open source les plus populaires :
De plus, vous pouvez également essayer de petits LLM de
Lama.cpp
Nous utiliserons
Tout d’abord, vous devez installer wget
et git
. Et puis suivez les étapes pour compiler et installer llama.cpp.
sudo apt-get install build-essential
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make
Télécharger les poids du modèle
Afin d'exécuter les LLM sur notre machine peu coûteuse au lieu de serveurs cloud dotés de GPU coûteux, nous devons utiliser une version « compressée » des modèles afin qu'ils puissent s'insérer dans l'espace RAM. Pour un exemple simple, un modèle LLaMA-2 7B a 7B paramètres, chacun représenté par float16 (2 octets).
- Float 16 : 14 octets ou 14 Go qui ne rentrent pas dans nos 8 Go de RAM.
- Quantifié à 4 bits : 3,5 octets ou 3,5 Go qui peuvent désormais tenir dans nos 8 Go de RAM.
De plus, le format du fichier doit être
Test sur mini PC AMD
Tout d’abord, nous l’avons testé sur le mini PC AMD et nous avons atteint environ 10 jetons par seconde. C'est en fait assez correct et vous pouvez discuter avec le LLM sans trop attendre.
Configuration du système :
- AMD Ryzen 5800H
- 32 Go de RAM
Instruction de ligne de commande :
./main -m models/llama-2-7b-chat.Q4_0.gguf --color -ins -n 512 --mlock
llama_print_timings: load time = 661.10 ms
llama_print_timings: sample time = 234.73 ms / 500 runs ( 0.47 ms per token, 2130.14 tokens per second)
llama_print_timings: prompt eval time = 1307.11 ms / 32 tokens ( 40.85 ms per token, 24.48 tokens per second)
llama_print_timings: eval time = 50090.22 ms / 501 runs ( 99.98 ms per token, 10.00 tokens per second)
llama_print_timings: total time = 64114.27 ms
Test sur mini PC Intel
Ensuite, nous avons testé sur un mini PC Intel et nous avons obtenu environ 1,5 jeton par seconde. C'est un peu trop lent pour une session de discussion fructueuse. Ce n'est pas une comparaison juste, puisque l'Intel N5105 est nettement plus faible que l'AMD 5800H. Mais c'est le seul mini PC Intel en ma possession. Si vous utilisez un processeur Intel plus puissant (par exemple, Core i5-1135G7), vous devriez obtenir des résultats comparables. Veuillez rapporter vos conclusions dans les commentaires ci-dessous.
Configuration du système :
- 11e génération 4 cœurs N5105 (jusqu'à 2,9 GHz) 4 cœurs et 4 threads
- 16 Go de RAM (2 Go de VRAM pour iGPU)
./main -m models/llama-2-7b-chat.Q4_0.gguf -ins --color -n 512 --mlock
llama_print_timings: load time = 14490.05 ms
llama_print_timings: sample time = 171.53 ms / 97 runs ( 1.77 ms per token, 565.49 tokens per second)
llama_print_timings: prompt eval time = 21234.29 ms / 33 tokens ( 643.46 ms per token, 1.55 tokens per second)
llama_print_timings: eval time = 75754.03 ms / 98 runs ( 773.00 ms per token, 1.29 tokens per second)
Diffusion stable
Installation
Et faites également attention à cette page, en ce qui concerne AMD ROCm
Démarrage rapide
export HSA_OVERRIDE_GFX_VERSION=9.0.0
source venv/bin/activate
./webui.sh --upcast-sampling --skip-torch-cuda-test --precision full --no-half
Test de diffusion stable 1,5
./webui.sh --upcast-sampling --skip-torch-cuda-test --precision full --no-half
Essai 1
- Invite : « cheval dans la forêt »
- Étapes : 20, Échantillonneur : DDIM, Échelle CFG : 7, Graine : 519288240, Taille : 512 x 512, Hachage du modèle : 6ce0161689, Modèle : v1-5-pruned-emaonly, Version : v1.6.0
- Temps pris : 1 min. 8,3 s.
Test de diffusion stable XL 1.0
SDXL (résolution maximale 1024x1024) recommande au moins 12 Go de VRAM, vous devez donc absolument effectuer l'étape de préparation 1 pour allouer 16 Go de VRAM à l'iGPU. Cette tâche n’est donc possible qu’avec le mini PC à 400 $.
./webui.sh --upcast-sampling
Essai 1 :
- Invite : « cheval dans la forêt »
- Étapes : 20, Échantillonneur : DDIM, Échelle CFG : 7, Graine : 1102941451, Taille : 1024 x 768, Hachage du modèle : 31e35c80fc, Modèle : sd_xl_base_1.0, Version : v1.6.0
- Temps pris : 7 min. 41 secondes
Essai 2 :
- Invite : « jeune Taylor Swift en sweat à capuche rouge montant à cheval dans la forêt »
- Invite négative : déformations, déformation, yeux déformés, dents déformées, doigts déformés, visage déformé, mains déformées, déformée
- Étapes : 20, Échantillonneur : DDIM, Échelle CFG : 7, Graine : 2960206663, Taille : 1024 x 1024, Hachage du modèle : 31e35c80fc, Modèle : sd_xl_base_1.0, Version : v1.6.0
- Temps pris : 6 min. 12,3 s.
Windows 11 et AMD/directml
Bien que cet article se concentre sur les systèmes d’exploitation Linux, vous pouvez également faire fonctionner Stable Diffusion sous Windows. Voici mes expériences :
- Tout d'abord, vous devez installer Python 3.10.6.
- Ajoutez le directeur Python 3.10.6 à PATH.
- Important : le chemin Python doit être le chemin supérieur
- https://realpython.com/add-python-to-path/
- Installer le dépôt git et git clone
- Exécutez webui-user.bat à partir de l'explorateur de fichiers
Essai 1 :
- Invite : « cheval dans la forêt »
- Paramètres : DPM++ 2M Karras, 512x512, pas d'échantillonnage 20
- Temps pris : 1m19s
Conclusions
Alors, est-ce que vous vous amusez à exécuter vos propres modèles d'IA générative sur votre nouveau mini PC à 300 $ ? J'espère que tu vas le faire.
Les modèles d'IA open source fonctionnant sur des appareils personnels sont l'un des domaines les plus intéressants pour les bricoleurs, car aucun d'entre nous ne disposera de l'énorme pool de GPU nécessaire pour réellement former un modèle de base. Cela permettra une nouvelle génération d’applications à la fois super intelligentes tout en préservant la confidentialité de nos données.
Et ensuite ?
- Exécutez-le sur des appareils embarqués encore plus petits : par exemple, Raspberry Pi
- Exécutez-le sur vos smartphones (llama.cpp prend en charge iOS et Android)
Et bon bricolage avec l'IA, l'open source et sur l'appareil !