Inférence CPU #0 : comprendre avant d'optimiser

J'ai écrit herbert-rs, un moteur d'inférence LLM local en Rust. Pas une surcouche, pas un binding : chaque multiplication matricielle, chaque kernel d'attention, chaque routine est implémentée et mesurée au cycle près — en assembleur x86-64 et ARM64, en compute shaders Metal et Vulkan, avec des compteurs hardware (PMC) pour valider chaque décision.

Ce projet repose sur quelques principes simples :

Les systèmes d'inférence modernes sont gouvernés par un grand nombre de variables :

Toute optimisation doit être précédée et suivie d'une campagne de mesures rigoureuse. Aucune conclusion ne peut être tirée sans :

Les régressions et les résultats négatifs doivent être conservés et expliqués.

L'objectif n'est pas seulement d'optimiser un moteur, mais de comprendre empiriquement le comportement des systèmes d'inférence.


Ça va prendre du temps. Les articles de cette série iront au fond des choses — couche par couche, instruction par instruction, mesure par mesure.

Le premier article, les trois régimes d'inférence, posait les fondations : prefill, decode et question-prefill obéissent à des lois physiques différentes.

Le prochain article entrera dans le modèle lui-même : où passe le temps, couche par couche.


herbert-rs est open source. Le code, les benchmarks et les discussions techniques sont les bienvenus.

Inférence CPU -- série en cours

  1. Inférence CPU #0 : comprendre avant d'optimiser
  2. Inférence CPU #1 : les trois régimes