ArchitectureArchitecture

Offline, air-gapped LLM: edge AI with no cloud and no networkLLM hors ligne et isolé : l'IA embarquée sans cloud ni réseau

2026-06-03 · Tilelli Lab · 5 min read5 min de lecture

The Atome C99 engine has a property most inference stacks do not: at runtime it allocates no heap, makes no system calls, and touches no network. Everything lives in static buffers sized at compile time. That sounds like an austerity measure, but it is actually the source of the engine's best security and reliability properties.Le moteur C99 d'Atome possède une propriété que la plupart des piles d'inférence n'ont pas : à l'exécution, il n'alloue aucun tas, ne fait aucun appel système et ne touche à aucun réseau. Tout réside dans des tampons statiques dimensionnés à la compilation. Cela ressemble à une mesure d'austérité, mais c'est en réalité la source des meilleures propriétés de sécurité et de fiabilité du moteur.

What “no heap” actually meansCe que « sans tas » signifie vraiment

The block structure is fixed: one LayerNorm, one ternary depthwise convolution, one diagonal state-space model, one top-k attention, one router — and a static buffer for each pathway output, the SSM state, the KV cache, the router weights, and the logits. There is nothing else. No malloc means no fragmentation, no out-of-memory mid-inference, and no allocator to audit. The whole engine compiles to roughly 2.6 KB of .text. A failure mode that simply cannot occur is the cheapest failure mode to handle.La structure du bloc est fixe : une LayerNorm, une convolution ternaire depthwise, un modèle d'état diagonal, une attention top-k, un routeur — et un tampon statique pour chaque sortie de voie, l'état du SSM, le cache KV, les poids du routeur et les logits. Rien d'autre. Pas de malloc signifie pas de fragmentation, pas de panne mémoire en pleine inférence, et aucun allocateur à auditer. Le moteur entier se compile en environ 2,6 Ko de .text. Un mode de défaillance qui ne peut tout simplement pas se produire est le mode de défaillance le moins coûteux à gérer.

Why air-gapped is a featurePourquoi l'isolement est une fonctionnalité

A model that cannot phone home cannot leak. For defense, medical and industrial deployments, “the data never leaves the chip” is a compliance story you can actually defend, because there is no network path to begin with — not a policy, an architecture. No cloud dependency also means no latency, no per-inference cost, and no outage when the link drops. The model is part of the firmware, answers the same way on every device, and keeps working when the building's internet does not.Un modèle qui ne peut pas appeler à la maison ne peut pas fuiter. Pour les déploiements de défense, médicaux et industriels, « les données ne quittent jamais la puce » est un argument de conformité réellement défendable, parce qu'il n'existe aucun chemin réseau au départ — ce n'est pas une politique, c'est une architecture. L'absence de dépendance au cloud signifie aussi aucune latence, aucun coût par inférence et aucune coupure quand le lien tombe. Le modèle fait partie du firmware, répond de la même manière sur chaque appareil, et continue de fonctionner quand l'internet du bâtiment, lui, ne fonctionne plus.

The discipline it forcesLa discipline qu'il impose

Designing for a fixed structure means saying no: no wide convolutions, no dense feed-forward block, no multi-bank weights, no per-row scales. Those are deliberate omissions, not gaps. Each would either break the bit-exact parity contract between Python and C or blow the RAM budget. The constraint is the design — and it is what lets the same trained checkpoint export to flash and run identically on the reference and the chip.Concevoir pour une structure fixe, c'est savoir dire non : pas de convolutions larges, pas de bloc feed-forward dense, pas de poids multi-bancs, pas d'échelles par ligne. Ce sont des omissions délibérées, pas des manques. Chacune romprait soit le contrat de parité bit-exacte entre Python et C, soit le budget RAM. La contrainte est la conception — et c'est elle qui permet au même point de contrôle entraîné d'être exporté vers le flash et de s'exécuter à l'identique sur la référence et sur la puce.

When this matters mostQuand cela compte le plus

If your product handles audio, medical signals, location, or anything a user would not want sent to a server, an air-gapped on-device model removes the question entirely instead of answering it with a privacy policy. If your product must keep working in a tunnel, on a factory floor, or in a remote sensor with no connectivity, the same property is a reliability guarantee. The engine, its build targets, and the measured RAM table are all in the c_engine directory of the public repository.Si votre produit traite de l'audio, des signaux médicaux, de la localisation, ou tout ce qu'un utilisateur ne voudrait pas voir envoyé à un serveur, un modèle embarqué isolé supprime la question entièrement au lieu d'y répondre par une politique de confidentialité. Si votre produit doit continuer à fonctionner dans un tunnel, dans une usine ou dans un capteur distant sans connectivité, la même propriété devient une garantie de fiabilité. Le moteur, ses cibles de compilation et la table RAM mesurée se trouvent tous dans le répertoire c_engine du dépôt public.

What an attacker cannot reachCe qu'un attaquant ne peut pas atteindre

Security people think in terms of attack surface, and an air-gapped, heap-free engine removes several surfaces outright. There is no network listener to probe, so remote exploitation has no entry point. There is no dynamic allocator, so an entire class of heap-corruption bugs cannot occur. There are no system calls into an operating system, because there is no operating system — the engine is a library compiled into your firmware. None of this makes the surrounding product automatically secure, but it shrinks the part of the system that touches the model down to a small, static, auditable surface, which is exactly what you want when you have to reason about a device that may sit in the field for a decade.Les spécialistes de la sécurité raisonnent en surface d'attaque, et un moteur isolé et sans tas supprime d'emblée plusieurs surfaces. Il n'y a pas d'écouteur réseau à sonder, donc l'exploitation à distance n'a aucun point d'entrée. Il n'y a pas d'allocateur dynamique, donc toute une classe de bugs de corruption de tas ne peut pas se produire. Il n'y a pas d'appels système vers un système d'exploitation, parce qu'il n'y a pas de système d'exploitation — le moteur est une bibliothèque compilée dans votre firmware. Rien de tout cela ne rend le produit environnant automatiquement sûr, mais cela réduit la partie du système qui touche le modèle à une petite surface statique et auditable, exactement ce que l'on veut quand il faut raisonner sur un appareil qui peut rester sur le terrain pendant une décennie.

Determinism is its own kind of safetyLe déterminisme est une forme de sûreté

Because the engine allocates nothing and the Python and C paths are bit-exact, the device's behavior is deterministic and reproducible: the same input produces the same output, on every unit, every time, and that output matches what you validated on your workstation. For safety-relevant functions this is worth as much as the privacy story. You can test a fixed set of inputs, prove the outputs, and know that the fielded devices will not drift because there is no allocator state, no network variability, and no floating-point divergence between the reference and the chip. Predictability, here, is a feature you design in, not a property you hope for.Parce que le moteur n'alloue rien et que les chemins Python et C sont bit-exacts, le comportement de l'appareil est déterministe et reproductible : la même entrée produit la même sortie, sur chaque unité, à chaque fois, et cette sortie correspond à ce que vous avez validé sur votre poste de travail. Pour des fonctions relevant de la sûreté, cela vaut autant que l'argument de confidentialité. Vous pouvez tester un ensemble fixe d'entrées, prouver les sorties, et savoir que les appareils déployés ne dériveront pas, parce qu'il n'y a pas d'état d'allocateur, pas de variabilité réseau, et pas de divergence flottante entre la référence et la puce. Ici, la prévisibilité est une fonctionnalité que l'on conçoit, pas une propriété que l'on espère.

Power and longevity in the fieldConsommation et longevité sur le terrain

An air-gapped, heap-free engine also tends to be a frugal one, and frugality is what lets a device live for years on a battery or a harvested-energy budget. With no radio to power, no operating system scheduler running, and ternary weights that replace multiplies with sign flips and skips, the energy spent per inference is dominated by a short burst of simple arithmetic rather than by networking or a busy CPU. That matters for the exact products this architecture targets: a sensor on a wall, a wearable, a remote monitor that must run untouched for a long time. Lower, more predictable energy per inference translates directly into longer battery life and fewer maintenance visits, and because the computation is deterministic you can characterize that energy budget once and trust it across the fleet.Un moteur isolé et sans tas tend aussi à être frugal, et la frugalité est ce qui permet à un appareil de vivre des années sur une batterie ou un budget d'énergie récupérée. Sans radio à alimenter, sans ordonnanceur de système d'exploitation en marche, et avec des poids ternaires qui remplacent les multiplications par des changements de signe et des sauts, l'énergie dépensée par inférence est dominée par une courte salve d'arithmétique simple plutôt que par le réseau ou un CPU occupé. Cela compte pour les produits que cette architecture vise précisément : un capteur sur un mur, un objet porté, un moniteur distant qui doit fonctionner sans intervention longtemps. Une énergie par inférence plus basse et plus prévisible se traduit directement par une autonomie plus longue et moins de visites de maintenance, et comme le calcul est déterministe, vous pouvez caractériser ce budget énergétique une fois et lui faire confiance sur toute la flotte.

Bottom lineEn résumé

A zero-heap, air-gapped engine is not an austerity compromise; it is where the architecture's best properties come from. No network path means data cannot leak and the device keeps working offline. No allocator means a whole class of failures cannot occur and the code stays small and auditable. Bit-exact determinism means the behavior you validated is the behavior that ships, and frugal arithmetic means long battery life in the field. For privacy-sensitive, safety-relevant or long-lived products, those are not nice-to-haves — they are the reason to build on-device in the first place.Un moteur sans tas et isolé n'est pas un compromis d'austérité ; c'est de là que viennent les meilleures propriétés de l'architecture. L'absence d'accès réseau signifie que les données ne peuvent pas fuiter et que l'appareil continue de fonctionner hors ligne. L'absence d'allocateur signifie qu'une classe entière de défaillances ne peut pas survenir et que le code reste petit et auditable. Le déterminisme bit-exact signifie que le comportement validé est celui qui est livré, et une arithmétique frugale signifie une longue autonomie sur le terrain. Pour des produits sensibles à la confidentialité, relevant de la sûreté ou de longue durée de vie, ce ne sont pas des bonus — c'est la raison même de construire en embarqué.

Frequently asked questionsQuestions fréquentes

Can an LLM run completely offline?Un LLM peut-il fonctionner entièrement hors ligne ?

Yes. Atome's C engine has no network path and no cloud dependency — inference runs entirely on the device, so it works offline and the data never leaves the chip.Oui. Le moteur C d'Atome n'a aucun accès réseau ni dépendance au cloud — l'inférence s'exécute entièrement sur l'appareil, il fonctionne donc hors ligne et les données ne quittent jamais la puce.

Why does a heap-free engine matter on a microcontroller?Pourquoi un moteur sans tas est-il important sur un microcontrôleur ?

No malloc means no memory fragmentation and no out-of-memory failures during inference, plus a smaller, auditable codebase — about 2.6 KB of .text. That predictability is critical for embedded reliability.Pas de malloc signifie pas de fragmentation mémoire ni de panne mémoire pendant l'inférence, et une base de code plus petite et auditable — environ 2,6 Ko de .text. Cette prévisibilité est essentielle pour la fiabilité embarquée.

← All posts← Tous les articles Source & data on GitHubCode & données sur GitHub