3 points par GN⁺ 2025-02-17 | 1 commentaires | Partager sur WhatsApp
  • En exécutant le modèle deepseek_r1_distill_llama_8b_q40 sur 4 Raspberry Pi 5 8GB avec distributed-llama v0.12.2, les vitesses d’évaluation et de génération se sont révélées supérieures à celles d’une configuration à 2 nœuds
  • La configuration à 2 nœuds a enregistré Evaluation 7.70 tok/s et Prediction 3.54 tok/s, tandis que la configuration à 4 nœuds a atteint Evaluation 11.68 tok/s et Prediction 6.43 tok/s
  • Le log Prediction de la configuration à 4 nœuds affiche environ 155.60 ms par token, contre environ 282.22 ms par token pour la configuration à 2 nœuds, ce qui met en évidence la différence de vitesse de traitement du même modèle avec un nombre de nœuds plus élevé
  • Un autre utilisateur a partagé des résultats sur 8 nœuds avec la v0.12.7, un réseau 2.5G LAN et une configuration basée sur d’anciens CPU Intel, avec Evaluation 33.64 tok/s et Prediction 16.63 tok/s
  • Pour les cas où le processus s’arrête faute de mémoire sur 2 Raspberry Pi 5 8GB, une réponse indique qu’il faut réduire la taille du contexte avec --max-seq-len 4096

Résultats d’exécution sur une configuration Raspberry Pi 5 8GB

  • Le modèle testé est deepseek_r1_distill_llama_8b_q40, et la version de distributed-llama est 0.12.2
  • La comparaison porte sur les configurations 2 x Raspberry Pi 5 8GB et 4 x Raspberry Pi 5 8GB
Configuration Evaluation Prediction
2 x Raspberry Pi 5 8GB 7.70 tok/s 3.54 tok/s
4 x Raspberry Pi 5 8GB 11.68 tok/s 6.43 tok/s

Valeurs de log pour la configuration à 2 nœuds

  • La configuration 2 x Raspberry Pi 5 8GB a enregistré les valeurs suivantes en Evaluation
    • nBatches: 32
    • nTokens: 19
    • tokens/s: 7.70
    • 129.89 ms/tok
  • En Prediction, elle a enregistré les valeurs suivantes
    • nTokens: 77
    • tokens/s: 3.54
    • 282.22 ms/tok
  • À la fin de l’exécution, le log affiche Network is closed

Valeurs de log pour la configuration à 4 nœuds

  • La configuration 4 x Raspberry Pi 5 8GB a enregistré les valeurs suivantes en Evaluation
    • nBatches: 32
    • nTokens: 19
    • tokens/s: 11.68
    • 85.63 ms/tok
  • En Prediction, elle a enregistré les valeurs suivantes
    • nTokens: 77
    • tokens/s: 6.43
    • 155.60 ms/tok
  • Le log affiche de manière répétée, pendant la génération des tokens, des envois de 864 kB et des réceptions de 1191 kB

Résultats sur 8 nœuds d’un autre utilisateur

  • Un utilisateur a partagé le résultat obtenu avec 8 nœuds sur distributed-llama v0.12.7
    • Principalement d’anciens CPU Intel, en configuration 4 cœurs ou 6 cœurs
    • Prise en charge d’AVX2
    • Connexion 2.5G LAN
  • Les résultats d’exécution de cette configuration sont les suivants
    • Evaluation: 33.64 tok/s, 29.73 ms/tok
    • Prediction: 16.63 tok/s, 60.13 ms/tok
    • Le nombre de tokens en Prediction est de 245
  • La commande utilisée suit la forme ./dllama inference avec le modèle, le tokenizer, --buffer-float-type q80, --nthreads 6, --max-seq-len 4096, plusieurs --workers et --steps 256

Problèmes d’exécution et réponses

  • Un cas a été partagé où, sur une configuration de 2 Raspberry Pi 5 8GB, l’exécution s’est terminée par Killed après l’affichage de RequiredMemory: 20474 MB
    • La commande du nœud racine incluait --buffer-float-type q80, --steps 16, --nthreads 4 et une adresse worker
    • La réponse indique qu’il faut réduire la taille du contexte avec --max-seq-len 4096
  • Un autre utilisateur a signalé qu’après connexion à plusieurs workers, le prompt what is 99+12 ne produisait que des espaces et des points
    • Le log affiche RopeScaling: f=8.0, l=1.0, h=4.0, o=8192, RequiredMemory: 3310 MB, Chat template: deepSeek3
    • L’administrateur a demandé quelle version était utilisée, si les derniers changements avaient bien été récupérés avec pull, et sur quel CPU l’exécution avait lieu

1 commentaires

 
GN⁺ 2025-02-17
Avis sur Hacker News
  • Les annonces disant qu’on fait tourner Deepseek R1 sur Raspberry Pi suivent globalement toujours le même schéma : en pratique, on exécute plutôt un Llama ou Qwen modifié via la technique de distillation de DeepSeek

    • Un mode d’échec courant des modèles DeepSeek distillés, c’est qu’ils ne réalisent pas qu’ils font du sur-place
      DeepSeek pousse les grands modèles de langage distillés à interrompre leur sortie avec « Wait. » pour les amener à faire un peu de raisonnement, mais cela reste bien plus faible que la capacité de raisonnement du modèle complet, et au lieu de faire progresser leur conclusion avec de nouvelles nuances, ils peuvent tomber dans une boucle de doute de soi où ils répètent indéfiniment « Wait. »
    • Je ne sais pas si le titre de la soumission a changé, mais il est maintenant explicitement écrit Deepseek R1 Distill 8B Q40, donc l’appeler simplement « Deepseek R1 » décrit effectivement mal le résultat
      Cela dit, la section Distilled Model Evaluation[1] du dépôt officiel de R1 montre que DeepSeek-R1-Distill-Llama-8B s’en sort plutôt bien, et dépasse même 4o-0513 et Sonnet-1022 sur certains benchmarks
      Il faut aussi se rappeler qu’il peut y avoir un échantillonnage depuis une grammaire formelle. llama.cpp a GBNF, et il y a maintenant aussi un réglage de lazy grammar[2], ce qui l’a rendu assez utilisable pour certains cas d’usage. Cela signifie que la grammaire intervient ensuite
      En plus, il reste une marge pour du fine-tuning supplémentaire. Plusieurs entreprises proposent désormais des services de « RFT », qui consistent à enrichir un dataset classique de fine-tuning supervisé avec des données de raisonnement synthétiques générées par un grand R1. Donc ce résultat préliminaire peut avoir bien plus de valeur qu’il n’y paraît
      Un décodage à 6 tok/s n’est pas rapide, mais les utilisateurs de Raspberry Pi s’en soucient rarement vraiment
      [1] https://github.com/deepseek-ai/DeepSeek-R1#distilled-model-e...
      [2] https://github.com/ggerganov/llama.cpp/pull/9639
    • J’aimerais qu’on explique ce que signifie cette méthode de distillation pour un ingénieur logiciel dont le machine learning n’est pas le métier
      Que veut dire le fait que R1 entraîne un modèle Llama, et qu’a de particulier la méthode de distillation de DeepSeek ?
    • Ce n’est qu’un LLaMa fine-tuné pour produire une chaîne de pensée ressemblant à celle de DeepSeek
      Un vrai modèle « distillé » devrait être entraîné dès le départ à imiter complètement le plus grand modèle, ce qui n’est pas ce qui se passe ici
    • Je n’aime vraiment pas que ce genre de modèles puisse être brandé sous le nom Deepseek R1
  • Comme toujours, les chiffres de tok/s sont à prendre avec énormément de recul
    Dans la démo, on « résout » une question de moins de 500 tokens. Le simple fait que ce soit possible reste impressionnant, mais sur de vrais problèmes et avec une longueur de contexte réellement utile pour un modèle « pensant », c’est-à-dire 8 à 16k tokens, on est loin d’atteindre cette vitesse. Même un Epyc avec beaucoup de canaux tombe à 2–4 tok/s une fois la longueur de contexte passée autour de 4096

    • J’ai vérifié ce que donne une exécution longue, donc une prédiction prolongée, sur quatre Raspberry Pi 5
      pos=0 => P 138 ms S 864 kB R 1191 kB Connect
      pos=2000 => P 215 ms S 864 kB R 1191 kB .
      pos=4000 => P 256 ms S 864 kB R 1191 kB manager
      pos=6000 => P 335 ms S 864 kB R 1191 kB the
    • Les petits robots traitent généralement de petits problèmes
      Même si le modèle n’aide qu’un peu, cela peut déjà les rendre bien plus capables qu’aujourd’hui
  • Ce n’est pas un mauvais résultat, mais si on va dépenser 320 £ pour quatre Pi 5, on peut trouver une 3080 12 Go d’occasion, et la vitesse en tokens sera probablement au moins 10 fois supérieure

    • Ou bien brancher directement un GPU de 12 Go ou 16 Go sur un seul Pi 5, et obtenir plus de 20 tok/s même avec des modèles plus gros
      https://github.com/geerlingguy/ollama-benchmark?tab=readme-o...
    • « Deepseek R1 Distill 8B Q40 on 1x 3080, 60.43 tok/s (eval 110.68 tok/s) » ne serait probablement pas monté en tête sur Hacker News
    • Cela dit, la consommation électrique, c’est 48 W contre 320 W
    • On peut aussi envisager d’utiliser deux 3060 de 12 Go environ
  • Ce qui est intéressant ici, c’est qu’on peut exécuter l’inférence de Llama de façon distribuée sur plusieurs ordinateurs

    • Du coup, on se demande où est l’équivalent pour les GPU distribués
      Est-ce qu’on ne pourrait pas, comme avec Seti@HOME, connecter des outils à un modèle R1 complet lent mais réparti à l’échelle mondiale, pour lui faire raisonner publiquement sur des tâches profondes et complexes ?
  • C’est une version moderne d’un cluster Beowulf

    • Honnêtement, j’ai toujours du mal à comprendre le mème des clusters de Raspberry Pi
      En mettant un peu plus d’argent que pour quatre Pi 5, on peut trouver sur eBay un serveur Dell 1U avec un CPU Epyc 32 cœurs et 64 Go de mémoire, avec des performances au minimum d’un ordre de grandeur supérieur
      Si on veut vraiment parler de cluster Beowulf dans un homelab, il faudrait au moins faire tourner des nœuds de calcul avec un réseau FDR Infiniband très bon marché, et une configuration du type Slurm+Lustre ou k8s+OpenStack+Ceph. Ce genre de montage avec quatre nœuds lents qui n’atteint même pas une mise à l’échelle linéaire, c’est difficile à défendre
  • Je n’ai pas vu ni compris comment plusieurs Raspberry Pi étaient utilisés en parallèle
    Quelqu’un pourrait indiquer la direction à suivre

  • Quand pourra-t-on installer ces super nouveaux outils d’IA avec apt-get install ?

    • Sur Mac, brew install ollama peut être un bon point de départ
    • Ce sera possible quand la distribution que vous utilisez commencera à empaqueter des outils pour grands modèles de langage, ou si vous passez à une distribution qui le fait
    • ollama pull s’en approche déjà pas mal
    • Ce n’est pas strictement apt-get, mais la plupart des composants d’infrastructure rangés sous « outils d’IA » peuvent être installés avec conda install
    • Il est aussi possible de télécharger une jolie version GUI de lm-studio
      qui enregistre les conversations et facilite le téléchargement des modèles
  • Si vous voulez tester ce modèle sur Mac, le modèle utilisé semble proche de DeepSeek-R1-Distill-Llama-8B, et vous pouvez l’exécuter avec le nouveau plugin llm-mlx
    brew install llm # or pipx install llm or uv tool install llm
    llm install llm-mlx
    llm mlx download-model mlx-community/DeepSeek-R1-Distill-Llama-8B
    llm -m mlx-community/DeepSeek-R1-Distill-Llama-8B 'poem about an otter'
    Les performances sont aussi plutôt bonnes : quand je viens de l’exécuter, j’ai obtenu 22 tokens/seconde : https://gist.github.com/simonw/dada46d027602d6e46ba9e4f48477...

  • Est-ce qu’ajouter de la mémoire aiderait ? Une version du RPi 5 avec 16GB RAM est sortie récemment

    • La vitesse d’inférence dépend bien davantage de la vitesse de lecture/écriture que de la quantité de mémoire
      Tant que le modèle tient en mémoire, c’est la bande passante mémoire qui détermine le comportement réel
    • Tant que le modèle et le contexte tiennent en mémoire, la capacité mémoire en elle-même n’aide pas
      Un modèle Q4 de 8B paramètres devrait tenir sur un Pi 8GB
    • Le Pi 5 16GB est apparu puis a vite disparu
      J’ai réussi à en acheter un quand Adafruit a reçu du stock récemment, mais il a de nouveau été épuisé presque immédiatement
      Cela dit, indépendamment des performances, certains modèles demandent plus de 8GB rien que pour s’exécuter, donc Ollama ne peut tout simplement pas les faire tourner
  • Il faudrait un produit du genre Alexa ou Google Home
    sauf qu’au lieu d’être connecté au cloud, il devrait exécuter un grand modèle de langage en local. Je ne sais pas pourquoi ça n’existe pas encore ou pourquoi personne n’en fabrique

    • C’est peut-être une question de prix
      Les bons grands modèles de langage coûtent cher, donc la vraie question est de savoir s’il est possible de proposer un modèle assez utile pour que les gens l’achètent, tout en restant assez bon marché pour conserver une marge
    • On peut obtenir quelque chose d’assez proche avec Home Assistant
      Je ne sais pas si l’usage d’outils fonctionne, mais on peut au moins exposer des choses qu’on voudrait demander, comme la météo
    • Par « grand modèle de langage en local », vous voulez dire quelque chose comme Ollama + llamacpp ?