paint-brush
Comment construire un ordinateur IA à 300 $ pour les pauvres en GPUpar@zbruceli
6,910 lectures
6,910 lectures

Comment construire un ordinateur IA à 300 $ pour les pauvres en GPU

par Bruce Li12m2024/03/24
Read on Terminal Reader

Trop long; Pour lire

Cependant, pour nous, pauvres en GPU, avoir notre propre ordinateur IA semble être un rêve coûteux. Macbook M3 Max ? 3 200 $, aïe ! Nvidia 4090 ? 1 850 $ ; ça fait mal même si tu peux en obtenir un. Ordinateur portable Microsoft Surface 6 ? À partir de 1 200 $, c'est encore trop. 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.
featured image - Comment construire un ordinateur IA à 300 $ pour les pauvres en GPU
Bruce Li HackerNoon profile picture


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. Macbook M3 Max ? 3 200 $, aïe ! Nvidia 4090 ? 1 850 $ ; ça fait mal même si tu peux en obtenir un. Ordinateur portable Microsoft Surface 6 ? À partir de 1 200 $, c'est encore trop.


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 Lama 2 7B) localement, ainsi que la génération d'images en utilisant Diffusion stable .


Maintenant, continuons.

Qu’est-ce qui fait un bon (et bon marché) ordinateur IA ?

Interconnexions à haut débit par zbruceli


Supposons que l'un des principaux cas d'utilisation d'un ordinateur IA domestique soit en cours d'exécution grands modèles de langage 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. lama.cpp 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.


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 :


  1. 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)


  2. 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.


  3. 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 Ryzen 7 5800H , 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.


Vous devez modifier cela en fonction de votre cas d'utilisation principal :

  1. 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.


  2. Si tu as besoin de courir Diffusion stable , en particulier SDXL (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.


https://winstonhyypia.medium.com/amd-apu-how-to-modify-the-dedicated-gpu-memory-e27b75905056

Préparation 2 : Installer les pilotes et le middleware

Configurations complexes par zbruceli

Alignez les étoiles

AMD ROCm (plateforme Radeon Open Compute), comparable à celle de Nvidia CUDA , 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.


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


Tableau de compatibilité du système d'exploitation AMD ROCm

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 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 conda ou venv dans ce but.

  • source venv/bin/activate
  • conda activate llm

Pytorche

https://pytorch.org/get-started/locally/


Tableau de compatibilité Pytorch

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

Parler au chatbot par zbruceli


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 : LLaMA2 avec des paramètres 7B optimisés pour le chat.


De plus, vous pouvez également essayer de petits LLM de Mistral , QWen , Zéphyr , et Vigogne . 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. Laboratoires LMSYS .


https://huggingface.co/spaces/lmsys/chatbot-arena-leaderboard

Lama.cpp

Nous utiliserons lama.cpp , 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 $.


https://github.com/ggerganov/llama.cpp


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 gguf . Donc. dans notre exemple, vous devez télécharger les poids dans ce fichier :

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

« Un artiste dessine des dragons avec l'IA » par zbruceli

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.



  • 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

Modèles d'IA open source sur appareils personnels par zbruceli


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 !