Un accélérateur FPGA open source fait tourner des LLM modernes avec une chaîne d'outils complète
Le projet openTPU publie un design complet d'accélérateur IA dans un seul dépôt, exécutant des modèles comme Qwen3 et LFM2.5 sur une carte FPGA Kintex-7 avec simulation bit-exact.
Traduit automatiquement depuis l'original anglais.
L'utilisateur GitHub FeSens a publié openTPU, un accélérateur IA open source qui inclut sa propre description matérielle, son jeu d'instructions, son simulateur, son compilateur et son profileur dans un dépôt unique. Publié le 6 octobre 2026, ce projet démontre que les grands modèles de langage modernes peuvent fonctionner efficacement sur des tableaux logiques programmables (FPGA) grâce à une pile logicielle et matérielle entièrement transparente.
Ce qui s'est passé
Le projet openTPU répond à deux questions fondamentales concernant l'état actuel de la conception matérielle pour l'IA : jusqu'où les agents autonomes peuvent aller dans la conception du matériel, et s'ils peuvent construire les puces mêmes qui exécutent leur propre inférence. L'accélérateur entier est contenu dans un petit monorepo, permettant aux développeurs de lire le code de bout en bout. Cela comprend la conception matérielle SystemVerilog, la définition du jeu d'instructions, un simulateur bit-exact, un langage de noyau avec son compilateur, et le logiciel hôte nécessaire pour piloter une carte PCIe physique.
La conception a été testée sur une carte Inspur YPCB-00338, qui intègre un FPGA Xilinx Kintex-7 xc7k480t et deux canaux mémoire DDR3. Elle exécute avec succès dix modèles modernes avec leurs poids réels, produisant des tokens qui correspondent exactement, bit par bit, à la sortie du simulateur. Le projet fournit des benchmarks détaillés pour des modèles tels que LFM2.5-230M, Qwen3-0.6B, Qwen3.5-0.8B, Gemma 4 E2B, LFM2-2.6B, SmolLM3-3B, Phi-4-mini, ainsi que Qwen3.5-2B et 4B. Ces tests couvrent les schémas de quantification int8 et 4 bits, montrant des vitesses de décodage allant de 3,75 tokens par seconde pour les plus grands modèles jusqu'à 85,8 tokens par seconde pour les plus petits.
Une mise à jour significative, appelée Build B, a amélioré les performances de décodage de 8 à 9 % pour plusieurs modèles par rapport aux images de production précédentes. Cette version a également augmenté l'utilisation de la bande passante DRAM entre 91 % et 94 % de la vitesse maximale DDR3-1066. Le système prend en charge les modèles à mélange d'experts (mixture-of-experts) plus volumineux que la mémoire de 4 GiB de la carte en diffusant les experts depuis le stockage hôte, maintenant une précision bit-exacte avec le simulateur même lors de ces opérations complexes.
Comment cela fonctionne
L'architecture est volontairement simple pour garantir la transparence et faciliter le débogage. Un séquenceur émet une instruction par cycle vers quelques unités spécialisées : un moteur DMA pour les mouvements de données, une unité matricielle pour la multiplication des poids int8 diffusés depuis la DRAM, une unité vectorielle pour les calculs fp32, et un quantiseur pour convertir les résultats en int8. Il n'y a pas de caches ni de mécanismes de planification cachés. Chaque mouvement de données est explicitement défini comme une instruction, ce qui signifie qu'une trace d'exécution révèle exactement où les cycles sont dépensés.
Les développeurs écrivent des noyaux dans un langage similaire à Python appelé ol, qui utilise des décorateurs comme @ol.jit pour compiler les opérations de haut niveau dans le jeu d'instructions personnalisé. Le compilateur gère les dispositions, l'adressage des boucles affines et la fusion. Les instructions résultantes sont exécutées sur le FPGA ou vérifiées contre le simulateur ISA basé sur Python. Comme le simulateur et la conception matérielle RTL (Register Transfer Level) traitent les mêmes bits, ils sont contrôlés par des tests pour assurer la cohérence. Cela permet aux développeurs de prototyper et de déboguer sur un ordinateur portable avant de déployer sur le matériel physique.
Le système inclut un profileur nommé Lens, qui enregistre les exécutions depuis le RTL, le simulateur ou la carte et les affiche dans un navigateur. Lens fournit un modèle roofline, une chronologie et des tableaux par instruction, colorant chaque cycle pour indiquer si une unité est occupée, attend la DRAM ou attend une autre instruction. Cette visibilité aide les ingénieurs à comprendre les goulets d'étranglement de performance, tels que les limites de bande passante DRAM, qui contraignent actuellement la vitesse de décodage à 82-85 % du pic théorique.
Détails clés
- Le projet fonctionne sur un FPGA Xilinx Kintex-7 xc7k480t avec deux canaux DDR3, atteignant une bande passante maximale de 17,1 GB/s.
- Les benchmarks montrent des vitesses de décodage allant de 3,75 tok/s pour Qwen3.5-4B à 85,8 tok/s pour LFM2.5-230M avec une quantification 4 bits.
- Le système prend en charge les poids 4 bits utilisant des valeurs FP4 avec des échelles de bloc à deux niveaux, réduisant les octets par token d'environ un tiers.
- Les modèles à mélange d'experts comme LFM2.5-8B-A1B fonctionnent en diffusant les experts depuis le stockage hôte, atteignant 10,6 tok/s avec un taux de réussite de slot de 98,5 %.
- Toutes les configurations correspondent au simulateur token par token, assurant une reproductibilité bit-exacte entre la simulation logicielle et l'exécution matérielle.
- La surcharge du logiciel hôte est minimale, ajoutant seulement 0,17 à 0,30 ms par token sur les systèmes optimisés, gardant l'accélérateur largement indépendant.
Pourquoi c'est important
Pour les ingénieurs logiciels et les praticiens du ML, openTPU démystifie la boîte noire des accélérateurs IA. En fournissant une pile complète, des noyaux Python jusqu'au RTL SystemVerilog, il offre une rare opportunité de comprendre comment les multiplications matricielles et les mécanismes d'attention se traduisent en mouvements physiques de fils et en cycles d'horloge. Ce niveau de transparence est inestimable à des fins pédagogiques et pour les développeurs qui doivent optimiser les modèles pour des contraintes matérielles spécifiques sans dépendre d'outils propriétaires.
Le projet met également en lumière les limites pratiques de l'inférence actuelle basée sur FPGA. Les benchmarks détaillés montrent que la performance de décodage est fortement limitée par la bande passante DRAM plutôt que par la puissance de calcul. Cette information guide les ingénieurs vers l'optimisation des motifs d'accès mémoire et des stratégies de quantification plutôt que vers une simple augmentation du débit computationnel. La capacité à faire tourner des modèles modernes comme Qwen3 et Gemma 4 sur du matériel relativement ancien comme le Kintex-7 suggère que une conception logicielle et architecturale efficace peut prolonger la vie de l'infrastructure existante.
De plus, l'intégration d'agents IA dans le processus de conception, comme le suggère l'approche "auto-arch-tournament", pointe vers un avenir où la conception matérielle elle-même pourrait être automatisée. Le fait que le système puisse construire et faire tourner la puce qui exécute ses propres boucles d'inférence crée un environnement de développement en boucle fermée qui pourrait accélérer l'innovation dans le matériel IA spécialisé.
Ce que vous pouvez faire
- Installez le package openTPU via pip et lancez le simulateur ISA sur votre ordinateur portable pour tester des modèles comme LFM2.5-230M sans matériel.
- Étudiez la documentation du jeu d'instructions dans
docs/isa.mdpour comprendre les opérations de bas niveau qui pilotent l'accélérateur. - Utilisez le profileur Lens pour visualiser les traces d'exécution et identifier les goulets d'étranglement DRAM dans vos propres implémentations de noyaux.
- Expérimentez avec les schémas de quantification 4 bits pour améliorer les vitesses de décodage, en notant les compromis en perplexité rapportés dans la documentation sur la quantification.
- Si vous disposez d'une carte PCIe Kintex-7 compatible, compilez le bitstream et chargez-le via JTAG pour effectuer une inférence en temps réel avec
otpu-chat. - Contribuez au projet en explorant le répertoire
rtl/et en aidant à améliorer les marges de timing et l'efficacité spatiale dans les futures versions.



