Tech

Pourquoi certaines équipes d'IA écrivent-elles leurs propres moteurs d'inférence en C et C++ ?

Hacker Newsil y a 2 h
Gros plan sur un processeur d'ordinateur sur une carte de circuit imprimé
Gros plan sur un processeur d'ordinateur sur une carte de circuit impriméPhoto: Sergei Starostin / Pexels

Lorsqu'une entreprise doit exécuter un modèle d'IA en production, le choix par défaut pour la plupart des équipes est un cadre bien établi : PyTorch pour la recherche et de plus en plus pour la production, TensorFlow Serving, ONNX Runtime, ou l'une des plateformes d'inférence gérées proposées par les fournisseurs de cloud. Pourtant, un schéma récurrent chez les équipes d'infrastructure IA, documenté récemment dans un billet de blog technique largement partagé, consiste à écrire à la place un moteur d'inférence personnalisé, à partir de zéro, en C ou en C++ — des langages beaucoup plus proches du matériel que les outils basés sur Python que la plupart des ingénieurs en apprentissage automatique utilisent au quotidien.

Cette décision paraît d'abord contre-intuitive. Les cadres généralistes existent précisément parce que construire un moteur d'inférence est difficile : il faut gérer correctement les formats de modèles, la gestion de la mémoire, l'optimisation spécifique au matériel, le regroupement par lots (batching) et la précision numérique, sans introduire de bugs qui corrompraient silencieusement la sortie d'un modèle. Écrire cette mécanique en C ou en C++, plutôt que de réutiliser un cadre ayant déjà résolu ces problèmes, revient à s'imposer des mois de travail d'ingénierie supplémentaire.

L'argument en faveur de cette approche commence généralement par la performance. Les cadres conçus pour la flexibilité et la facilité d'utilisation comportent une surcharge — couches d'abstraction, répartition dynamique, schémas d'allocation mémoire optimisés pour le confort du développeur plutôt que pour la vitesse brute — qu'un moteur conçu sur mesure peut éliminer. Pour les équipes exécutant l'inférence à grande échelle ou avec des budgets de latence serrés, gagner quelques millisecondes par requête en supprimant des couches d'abstraction inutiles peut se traduire directement par des coûts d'infrastructure réduits ou une expérience utilisateur nettement meilleure.

L'empreinte mémoire est le deuxième moteur principal. Les cadres généralistes sont conçus pour prendre en charge un large éventail d'architectures de modèles et de cas d'usage, ce qui signifie qu'ils portent des chemins de code et des dépendances dont un déploiement donné n'a pas besoin. Un moteur personnalisé construit pour un modèle spécifique, ou une famille de modèles, peut être réduit à exactement ce qu'exige ce cas d'usage, produisant un binaire nettement plus petit et une consommation mémoire plus faible — une différence qui compte énormément lorsqu'un modèle doit fonctionner sur du matériel contraint.

Cette contrainte devient décisive dans les scénarios de déploiement en périphérie (edge) et d'inférence locale : exécuter un modèle sur un téléphone, un appareil embarqué, un ordinateur portable, ou tout environnement dépourvu d'une pile GPU complète de centre de données. Dans ces contextes, une dépendance vers un cadre de plusieurs gigaoctets avec une empreinte d'exécution importante peut tout simplement ne pas tenir, ou laisser trop peu de marge pour le reste de l'application. Un moteur C ou C++ épuré, compilé spécifiquement pour le matériel cible, peut fonctionner avec une fraction de la mémoire et de l'espace disque nécessaires.

La gestion des dépendances constitue une motivation liée mais distincte. Les cadres de ML généralistes ont tendance à entraîner de vastes arbres de dépendances — autres bibliothèques, versions spécifiques de CUDA ou d'autres pilotes matériels, exigences d'environnement d'exécution Python — qui peuvent compliquer le déploiement, créer des conflits de versions, ou simplement rendre plus difficile la livraison d'une application sous forme d'un binaire unique et autonome. Un moteur construit sur mesure, avec un minimum de dépendances externes, évite une grande partie de cette complexité, au prix de devoir réimplémenter les fonctionnalités que ces dépendances auraient autrement fournies.

La portabilité entre matériels est un autre facteur cité par les équipes. Écrire au plus près du matériel en C ou en C++ rend plus pratique le ciblage direct de matériels inhabituels ou aux ressources limitées — architectures de processeur différentes, puces accélératrices spécialisées, processeurs embarqués — sans attendre qu'un cadre généraliste ajoute un support officiel. Les équipes développant pour du matériel que les cadres grand public ne priorisent pas constatent parfois qu'écrire leur propre moteur est plus rapide que d'attendre, ou de contourner les lacunes, celui de quelqu'un d'autre.

Le compromis, et il est bien réel, réside dans le coût d'ingénierie et la charge de maintenance continue. Un moteur d'inférence personnalisé doit être construit, testé et maintenu correct à chaque mise à jour de modèle, chaque nouvelle cible matérielle et chaque cas limite numérique qu'un cadre généraliste aurait autrement déjà géré. Les équipes qui empruntent cette voie assument en réalité, comme coût permanent de leur activité, le travail d'une petite équipe de maintenance de framework — ce qui n'a de sens que lorsque les gains de performance, d'empreinte ou de déploiement sont suffisamment importants pour le justifier.

C'est pourquoi cette pratique tend à apparaître à un moment précis de la croissance d'une entreprise : après que les contraintes des outils généralistes sont devenues un coût mesurable et récurrent — en dépenses de calcul, dans le matériel qu'un produit peut prendre en charge, ou dans une latence qui affecte le produit lui-même — plutôt que comme point de départ d'un nouveau projet. La plupart des équipes sont bien servies par les cadres existants tant que la surcharge de ces cadres n'a pas d'impact sur leur cas d'usage spécifique.

La leçon plus large pour les développeurs en dehors de l'infrastructure IA concerne moins le C et le C++ en particulier qu'un principe général de l'ingénierie des systèmes : les outils généralistes optimisent pour le cas courant et la flexibilité, et ce compromis est généralement le bon — jusqu'à ce qu'une cible de déploiement spécifique, une exigence de performance ou une contrainte de ressources rende la surcharge de cette flexibilité un coût qu'il vaut la peine d'éliminer en construisant à la place quelque chose de plus étroit et plus proche du matériel.

Cet article est un résumé éditorial assisté par IA basé sur Hacker News. L'image est une photo d'archive de Sergei Starostin sur Pexels.

À lire ensuite

Un dépôt de recharge de véhicules électriques la nuit
Plus dans Tech

Après des plaintes pour nuisances sonores, un juge ordonne à Waymo d'arrêter la recharge nocturne à Santa Monica

Un juge a ordonné à Waymo de cesser de recharger sa flotte de véhicules autonomes pendant la nuit dans une installation de Santa Monica, après que des résidents proches se sont plaints d'un bruit persistant. La décision met en lumière une friction croissante à mesure que les opérateurs de véhicules autonomes implantent des dépôts de recharge et d'attente au sein de quartiers résidentiels pour assurer un service de robotaxis 24 heures sur 24.

Ars Technica
Un écran d'ordinateur portable affichant des résultats de moteur de recherche
Tech

Le PDG de Reddit s'interroge sur les Aperçus IA de Google alors que l'action chute

Le PDG de Reddit aurait exprimé, alors que l'action de l'entreprise chutait, un scepticisme quant à savoir si les résumés de recherche générés par IA de Google, appelés Aperçus IA, représentent un échange équitable pour les plateformes dont le contenu alimente ces résumés. Ces propos s'ajoutent à un débat plus large du secteur sur la question de savoir si la synthèse de recherche par IA entame le trafic de référencement dont dépendent les plateformes financées par la publicité et par leurs communautés.

Ars Technicail y a 2 h
Rangées de smartphones exposés sur une étagère de magasin
Tech

Faut-il encore acheter son prochain smartphone, ou s'y abonner ?

Les abonnements pour smartphones — où opérateurs et fabricants intègrent l'appareil dans des frais mensuels récurrents plutôt qu'un achat unique — se répandent comme alternative aux cycles de renouvellement classiques. Peser le coût total face à la pleine propriété dépend de la fréquence à laquelle on change de téléphone, de l'importance accordée à la flexibilité plutôt qu'à la valeur de revente, et du rapport que l'on entretient avec le fait de ne jamais posséder pleinement son appareil.

TechCrunchil y a 2 h
Rangées de puces mémoire montées sur une carte de circuit imprimé
Tech

Pénurie de puces mémoire : le MacBook Air touché à son tour, sans fin en vue

Apple a discrètement relevé les prix de certaines configurations du MacBook Air, alors qu'une pénurie mondiale de mémoire DRAM et NAND flash se répercute sur l'électronique grand public. Cette tension résulte de la réorientation, par les fabricants de mémoire, de leur capacité de production vers les puces destinées aux centres de données d'intelligence artificielle, et les prévisions du secteur évoquent une pénurie susceptible de durer jusqu'en 2027, voire 2028.

TechCrunchil y a 2 h