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. ? 3 200 $, aïe ! ? 1 850 $ ; ça fait mal même si tu peux en obtenir un. ? À partir de 1 200 $, c'est encore trop. Macbook M3 Max Nvidia 4090 Ordinateur portable Microsoft Surface 6 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 7B) localement, ainsi que la génération d'images en utilisant . Lama 2 Diffusion stable 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 ou inférence LLM. Cette tâche ne nécessite en fait aucun GPU puisqu’elle peut être entièrement effectuée dans le CPU. est un logiciel open source qui permet une inférence LLM très rapide en utilisant un processeur normal. Il a été conçu à l'origine pour le Macbook équipé d'un processeur Apple de série M, mais il fonctionne également sur les processeurs Intel/AMD. grands modèles de langage lama.cpp 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 : 5800H (8C/16T, jusqu'à 4,4 GHz) AMD Ryzen 7 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 , la mémoire est partagée entre le CPU et l'iGPU (GPU intégré). Dans mon cas, j'ai 32 Go de RAM au total, mais l'allocation par défaut pour l'iGPU n'était que de 3 Go ! Cela varie d'un ordinateur à l'autre et est configuré dans le BIOS lors de la fabrication. Ryzen 7 5800H 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 , en particulier (1024x1024), vous devez allouer autant de RAM à l'iGPU que le système le permet (généralement la moitié de la RAM totale) Diffusion stable SDXL 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. https://winstonhyypia.medium.com/amd-apu-how-to-modify-the-dedicated-gpu-memory-e27b75905056 Préparation 2 : Installer les pilotes et le middleware Alignez les étoiles AMD (plateforme Radeon Open Compute), comparable à celle de Nvidia , est une suite de pilotes et de middleware permettant aux développeurs d'utiliser la puissance des GPU d'ADM. Et généralement, les applications d’IA ont besoin de ROCm pour obtenir l’accélération GPU. ROCm CUDA 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. https://rocm.docs.amd.com/projects/install-on-linux/en/latest/reference/system-requirements.html Installation du ROCm https://rocm.docs.amd.com/en/latest/deploy/linux/os-native/install.html Si l'ensemble de l'installation se termine bien, vous pouvez taper , et quelque chose comme ceci s'affichera (je n'ai coupé que les parties les plus pertinentes en surbrillance jaune) : rocminfo 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 ou dans ce but. conda venv source venv/bin/activate conda activate llm Pytorche https://pytorch.org/get-started/locally/ 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. https://rocm.docs.amd.com/en/latest/how_to/pytorch_install/pytorch_install.html#test-the-pytorch-installation 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 : avec des paramètres 7B optimisés pour le chat. LLaMA2 De plus, vous pouvez également essayer de petits LLM de , , , et . D'autres LLM de bonne qualité peuvent être trouvés ici sur le très utile « classement de l'arène des chatbots » de l'UC Berkeley. . Mistral QWen Zéphyr Vigogne Laboratoires LMSYS https://huggingface.co/spaces/lmsys/chatbot-arena-leaderboard Lama.cpp Nous utiliserons , qui est initialement optimisé pour le CPU et prend ensuite également en charge le GPU. D'après mon expérience, l'inférence LLM fonctionne bien sur le processeur, et il y a peu à gagner avec un GPU modeste tel que ceux intégrés à la machine IA à 300 $. lama.cpp https://github.com/ggerganov/llama.cpp Tout d’abord, vous devez installer et . Et puis suivez les étapes pour compiler et installer llama.cpp. wget git 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 . Donc. dans notre exemple, vous devez télécharger les poids dans ce fichier : gguf https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/blob/main/llama-2-7b-chat.Q4_0.gguf 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 https://github.com/AUTOMATIC1111/stable-diffusion-webui Et faites également attention à cette page, en ce qui concerne AMD ROCm https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Install-and-Run-on-AMD-GPUs 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 : https://github.com/lshqqytiger/stable-diffusion-webui-directml 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 !