Calcul d’inférence: contraintes sur le matériel

Le calcul se résume à une transformation linéaire (produit matriciel + biais) suivie d’une non-linéarité (fonction d’activation).

Pour chaque couche de neurones, on a un tenseur i représentant les données d’entrées de la couche j où chaque item xi va être multiplié par le poids Wj,i d’un neurone de la couche j. Le résultat du calcul sera appliqué à une fonction non-linéaire dont l’objectif est de propager la valeur au neurone de la couche suivante ou non. Ci-dessous, nous présentons le détail de calcul d’un modèle simple à deux couches.

L’analyse des étapes de traitement effectuées par une unité de calcul numérique met en évidence trois contraintes fondamentales qui conditionnent les performances d’un modèle de réseaux de neurones en termes de latence et d’utilisation des ressources matérielles.

Empreinte mémoire et Transfert des poids

Premièrement, l’empreinte mémoire du modèle, directement proportionnelle au nombre de poids W, constitue une contrainte critique. Celle-ci peut varier de quelques dizaines de kilooctets à plusieurs mégaoctets, dépassant souvent la capacité mémoire disponible dans un système embarqué. La réduction de cette empreinte, par quantification ou compression des poids, s’avère donc nécessaire. En effet, plus la cardinalité de W est élevée, plus le transfert des coefficients vers l’unité de calcul et leur traitement induisent un surcoût temporel. Soit un modèle de réseaux de neurones caractérisé par un ensemble de poids  , avec N=∣W∣ le nombre total de coefficients. L’empreinte mémoire totale s’écrit :

M=N⋅b,

où b représente la taille en octets d’un poids (typiquement b∈{1,2,4} selon la quantification : 8, 16 ou 32 bits). Le temps de transfert des poids depuis la mémoire externe vers l’unité de calcul est alors :

𝒯m=𝐌𝐁mem\mathcal{T}_{m}=\frac{\mathbf{M}}{\mathbf{B}_{mem}}

où  𝐁mem\mathbf{B}_{mem} désigne la bande passante mémoire effective (en octets/s). Une valeur élevée de N entraîne donc une augmentation linéaire du coût temporel de transfert.

Prétraitement des données d’entrée

Deuxièmement, la contrainte temporelle liée à l’inférence en temps réel impose un prétraitement des données d’entrée. Celui-ci vise à assurer la compatibilité avec le domaine de valeurs attendu par le modèle, généralement normalisé dans un intervalle restreint tel que [−1,1]. Cette étape, bien que souvent négligée, participe significativement à la consommation de ressources et au temps total de calcul.

Les données d’entrée x∈ℝdx\in\mathbb{R}^{d} doivent être transformées par une fonction de normalisation   f:ℝd→[−1,1]df:\mathbb{R}^{d}\;\rightarrow\;\left[-1,1\right]^{d} telle que :

x~=f(xi)=xi−μσ\tilde{x}\;=\;f(x_{i})=\frac{x_{i}-\mu}{\sigma}, i=1,…,d.

où μ et σ sont respectivement la moyenne et l’écart-type des données d’apprentissage. Le temps de prétraitement est alors proportionnel à la dimension d’entrée :

𝒯pre=𝒞pre.d,\mathcal{T}_{pre}\;=\;\mathcal{C}_{pre}.d,

avec 𝒞pre\mathcal{C}_{pre} le coût élémentaire de normalisation.

Calcul matriciel et latence d’inférence

Enfin, la troisième contrainte concerne la capacité de l’unité de calcul à exécuter efficacement les opérations matricielles, cœur du processus d’inférence. Le temps de calcul associé dépend à la fois de l’architecture matérielle retenue (CPU, GPU, FPGA, ASIC) et du degré de parallélisme exploitable dans l’implémentation numérique. L’inférence repose essentiellement sur une suite de multiplications matricielles entre les activations  𝒶(l)\mathcal{a}^{(l)} et les poids 𝒲(l)\mathcal{W}^{(l)} à chaque couche l.
Pour une couche dense de taille m×n, le coût computationnel est :

𝒞mult=𝒪(m.n)\mathcal{C}_{mult}\;=\; \mathcal{O}(m.n)

En pratique, le temps de calcul associé est :

𝒯comp=2.m.n𝒫ops\mathcal{T}_{comp}\;=\;\frac{2.m.n}{\mathcal{P}_{ops}},

où 𝒫ops\mathcal{P}_{ops} représente la capacité de l’unité de calcul (en opérations multiplications-additions par seconde). Le facteur 2 provient du nombre d’opérations élémentaires nécessaires pour un produit scalaire (multiplication et addition).

Latence totale d’inférence

La latence globale du modèle embarqué peut alors être exprimée comme :

𝒯total=𝒯mem+𝒯pre+𝒯comp\mathcal{T}_{total}\;=\;\mathcal{T}_{mem}\;+\;\mathcal{T}_{pre}\;+\;\mathcal{T}_{comp}

Ainsi, les performances d’inférence sont conditionnées par la taille mémoire du modèle, le coût de normalisation des entrées et la capacité de calcul matriciel du matériel sous-jacent. L’objectif d’un déploiement embarqué consiste à minimiser la latence totale sous contraintes mémoire et de ressources. Le problème peut s’écrire :

minW,f,A𝒯total(𝒲,f,𝒜)\begin{array}{c} min \\ W,f,A \end{array} \mathcal{T}_{total}(\mathcal{W},f,\mathcal{A})

sous les contraintes :

ℳ(𝒲)≤ℳmax,𝒯total≤𝒯RT,𝒜∈𝒮\mathcal{M}(\mathcal{W})\;\leq\;\mathcal{M}_{max},\mathcal{T}_{total}\;\leq\;\mathcal{T}_{RT}, \;\;\mathcal{A}\in\mathcal{S}

où :

  • M(W)=N⋅b est l’empreinte mémoire du modèle,
  • ​ ℳmax\mathcal{M}_{max} est la capacité mémoire disponible,
  • ​ 𝒯RT\mathcal{T}_{RT} est la limite temporelle imposée par le fonctionnement en temps réel,
  •  ff est la stratégie de prétraitement choisie,
  •  𝒜\mathcal{A} désigne l’architecture matérielle (CPU, GPU, FPGA, ASIC),
  •  𝒮\mathcal{S} est l’ensemble des architectures réalisables.

Ce formalisme traduit le compromis fondamental entre taille mémoire du modèle, bande passante de transfert, complexité algorithmique et puissance de calcul de la plateforme cible. L’ensemble des framework d’optimisation d’inférence d’un modèle disponible cherche à résoudre ce problème d’optimisation. Nous allons par la suite décrire les architectures matérielles dédiées à l’inférence du modèle et présenter pour chacun un outil open-source d’inférence de modèle.