# StarONNX: Un ordonanceur dynamique pour une inférence rapide et à haut débit sur des ressources hétérogènes

Olivier Beaumont, Jean-François David, Lionel Eyraud-Dubois, Samuel Thibault

► To cite this version:

Olivier Beaumont, Jean-François David, Lionel Eyraud-Dubois, Samuel Thibault. StarONNX: Un ordonanceur dynamique pour une inférence rapide et à haut débit sur des ressources hétérogènes. Compas 2024 - Conférence francophone d'informatique en Parallélisme, Architecture et Système, Jul 2024, Nantes, France. hal-04668550

HAL Id: hal-04668550

https://inria.hal.science/hal-04668550v1

Submitted on 25 Jul 2025

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

Public Domain
<figure><img src="image_1.png" /></figure>

<figure><img src="image_2.png" /></figure>

<figure><img src="image_3.png" /></figure>

# StarONNX :

un ordonnanceur dynamique pour une inférence rapide et à haut débit sur
des ressources hétérogènes

Olivier Beaumont, Jean-François David, Lionel Eyraud-Dubois,
Samuel Thibault

Inria Centre de l'Université de Bordeaux
Université de Bordeaux

03/07/2024

Inria

<figure><img src="image_4.png" /></figure>
<figure><img src="image_5.png" /></figure>

<figure><img src="image_6.png" /></figure>

<figure><img src="image_7.png" /></figure>

① Introduction

② StarONNX

③ Partitionnement

<figure><img src="image_8.png" /></figure>

<figure><img src="image_9.png" /></figure>

<figure><img src="image_10.png" /></figure>

<figure><img src="image_11.png" /></figure>

<figure><img src="image_12.png" /></figure>

<figure><img src="image_13.png" /></figure>

<figure><img src="image_14.png" /></figure>

<figure><img src="image_15.png" /></figure>

<figure><img src="image_16.png" /></figure>

<figure><img src="image_17.png" /></figure>

<figure><img src="image_18.png" /></figure>
<figure><img src="image_19.png" /></figure>

<figure><img src="image_20.png" /></figure>

<figure><img src="image_21.png" /></figure>

① Introduction

② StarONNX

③ Partitionnement

<figure><img src="image_22.png" /></figure>

<figure><img src="image_23.png" /></figure>

<figure><img src="image_24.png" /></figure>

<figure><img src="image_25.png" /></figure>

<figure><img src="image_26.png" /></figure>

<figure><img src="image_27.png" /></figure>

<figure><img src="image_28.png" /></figure>
<figure><img src="image_29.png" /></figure>

<figure><img src="image_30.png" /></figure>

<figure><img src="image_31.png" /></figure>

# Introduction

* L'inférence des modèles de réseaux de neurones profonds (DNN) sur des processeurs hétérogènes est un défi

* Objectifs : Minimiser la latence et maximiser le débit

* StarONNX : Solution intégrant ONNX Runtime avec StarPU pour l'ordonancement des tâches d'inférence

* Capacité d'utiliser un DNN divisé en deux parties (ou plus) afin de permettre à la fois l'utilisation du GPU et du CPU

<figure><img src="image_32.png" /></figure>
<figure><img src="image_33.png" /></figure>

<figure><img src="image_34.png" /></figure>

<figure><img src="image_35.png" /></figure>

# Motivations

## Optimisation de l'inférence :

* Approches actuelles reposent sur une meilleure utilisation des GPU

* D'autres solutions utilisent la structure parfois parallélisable des DNN pour permettre l'intervention du CPU

## Limites des approches actuelles:

* Dépendance excessive aux GPU entraîne plusieurs défis

* Saturation rapide des GPU

* Sous-utilisation des CPU

## Problématiques identifiées:

* Explosion du débit et impact sur la latence

* Thompson et al. montrent une augmentation des exigences en matière de calcul, rendant les approches actuelles prohibitives techniquement, économiquement et environnementalement

<figure><img src="image_36.png" /></figure>
<figure><img src="image_37.png" /></figure>

<figure><img src="image_38.png" /></figure>

<figure><img src="image_39.png" /></figure>

# ONNX Runtime, StarPU et StarONNX

## ONNX Runtime

* Support de plusieurs architectures de processeur

* Support plusieurs framework DNN

* Optimisations des modèles DNN

## StarPU

* Exécution pour CPU, GPU, et autres

* Ordonnancement des tâches

* Gestion de la mémoire et des transferts de données

## StarONNX

* Intégration d'ONNX Runtime avec StarPU

* Ordonnancement des tâches d'inférence et gestion des ressources de calcul

* Exécution et partage dynamique de modèle DNN entre GPU et CPU

<figure><img src="image_40.png" /></figure>
<figure><img src="image_41.png" /></figure>

<figure><img src="image_42.png" /></figure>

<figure><img src="image_43.png" /></figure>

# Les défis de l'hétérogénéité

* Problèmes d'architecture et de communication

* Utilisation équilibrée et adaptée des ressources

* Ordonancement des tâches

* Interopérabilité des logiciels

<figure><img src="image_44.png" /></figure>

L3 Cache

DRAM

CPU

<figure><img src="image_45.png" /></figure>

DRAM

GPU

<figure><img src="image_46.png" /></figure>

<figure><img src="image_47.png" /></figure>
<figure><img src="image_48.png" /></figure>

<figure><img src="image_49.png" /></figure>

<figure><img src="image_50.png" /></figure>

① Introduction

② StarONNX

③ Partitionnement

<figure><img src="image_51.png" /></figure>

<figure><img src="image_52.png" /></figure>

<figure><img src="image_53.png" /></figure>

<figure><img src="image_54.png" /></figure>

<figure><img src="image_55.png" /></figure>

<figure><img src="image_56.png" /></figure>

<figure><img src="image_57.png" /></figure>
<figure><img src="image_58.png" /></figure>

<figure><img src="image_59.png" /></figure>

<figure><img src="image_60.png" /></figure>

# Intégration d'ONNX Runtime dans StarPU

<figure><img src="image_61.png" /></figure>

<figure><img src="image_62.png" /></figure>

<figure><img src="image_63.png" /></figure>

<figure><img src="image_64.png" /></figure>

<figure><img src="image_65.png" /></figure>

<figure><img src="image_66.png" /></figure>

<figure><img src="image_67.png" /></figure>

<figure><img src="image_68.png" /></figure>

<figure><img src="image_69.png" /></figure>

<figure><img src="image_70.png" /></figure>

<figure><img src="image_71.png" /></figure>
<figure><img src="image_72.png" /></figure>

<figure><img src="image_73.png" /></figure>

<figure><img src="image_74.png" /></figure>

# Scénario

<figure><img src="image_75.png" /></figure>

<figure><img src="image_76.png" /></figure>

<figure><img src="image_77.png" /></figure>
<figure><img src="image_78.png" /></figure>

<figure><img src="image_79.png" /></figure>

<figure><img src="image_80.png" /></figure>

## Regroupement des requêtes d'inférences en lots

* Les requêtes d'inférence arrivant au serveur sont regroupées en lots

* Le temps nécessaire pour constituer un lot de N requêtes est

$$T_{\text{lot}} = T \times (N - 1)$$

* La latence correspond au temps de constitution d'un lot ajouté aux temps de transfert et de calcul

<figure><img src="image_81.png" /></figure>

<figure><img src="image_82.png" /></figure>
<figure><img src="image_83.png" /></figure>

<figure><img src="image_84.png" /></figure>

<figure><img src="image_85.png" /></figure>

# Évaluation des Performances

* Mesure de la latence et du débit pour différentes tailles de lot

* Sélection du lot minimisant la latence à un débit fixé

<figure><img src="image_86.png" /></figure>

<figure><img src="image_87.png" /></figure>

<figure><img src="image_88.png" /></figure>

<figure><img src="image_89.png" /></figure>

<figure><img src="image_90.png" /></figure>

<figure><img src="image_91.png" /></figure>

<figure><img src="image_92.png" /></figure>

<figure><img src="image_93.png" /></figure>

<figure><img src="image_94.png" /></figure>

<figure><img src="image_95.png" /></figure>

<figure><img src="image_96.png" /></figure>

<figure><img src="image_97.png" /></figure>

<figure><img src="image_98.png" /></figure>

<figure><img src="image_99.png" /></figure>

<figure><img src="image_100.png" /></figure>

<figure><img src="image_101.png" /></figure>

<figure><img src="image_102.png" /></figure>

<figure><img src="image_103.png" /></figure>
<figure><img src="image_104.png" /></figure>

<figure><img src="image_105.png" /></figure>

<figure><img src="image_106.png" /></figure>

# Évaluation des Performances

* Mesure de la latence et du débit pour différentes tailles de lot

* Sélection du lot minimisant la latence à un débit fixé

* Comparaison des performances entre StarONNX et Triton Inference Server

<figure><img src="image_107.png" /></figure>

<figure><img src="image_108.png" /></figure>

<figure><img src="image_109.png" /></figure>
<figure><img src="image_110.png" /></figure>

<figure><img src="image_111.png" /></figure>

<figure><img src="image_112.png" /></figure>

# Évaluation des Performances

<figure><img src="image_113.png" /><figcaption>Figure 1: Triton Inference Server</figcaption></figure>

<figure><img src="image_114.png" /><figcaption>Figure 2: StarONNX</figcaption></figure>

<figure><img src="image_115.png" /></figure>
<figure><img src="image_116.png" /></figure>

<figure><img src="image_117.png" /></figure>

<figure><img src="image_118.png" /></figure>

1. Introduction

2. StarONNX

3. Partitionnement

<figure><img src="image_119.png" /></figure>

<figure><img src="image_120.png" /></figure>

<figure><img src="image_121.png" /></figure>

<figure><img src="image_122.png" /></figure>

<figure><img src="image_123.png" /></figure>

<figure><img src="image_124.png" /></figure>

<figure><img src="image_125.png" /></figure>

<figure><img src="image_126.png" /></figure>
<figure><img src="image_127.png" /></figure>

<figure><img src="image_128.png" /></figure>

<figure><img src="image_129.png" /></figure>

## Objectif

* Utiliser à la fois le GPU et le CPU

* Suivre le débit fixé et minimiser la latence

## Avantages

* Optimisation de l'utilisation des Ressources

* Adaptation des Charges de calcul : GPU pour calculs lourds, CPU pour les plus légers

* Ordonnancement dynamique avec StarPU

* Réduction de la Latence et amélioration du débit

<figure><img src="image_130.png" /></figure>
<figure><img src="image_131.png" /></figure>

<figure><img src="image_132.png" /></figure>

<figure><img src="image_133.png" /></figure>

# Résultats

<figure><img src="image_134.png" /><figcaption>Figure 3: GoogLeNet</figcaption></figure>

<figure><img src="image_135.png" /><figcaption>Figure 4: EfficientNet V2</figcaption></figure>

<figure><img src="image_136.png" /></figure>
<figure><img src="image_137.png" /></figure>

<figure><img src="image_138.png" /></figure>

<figure><img src="image_139.png" /></figure>

# Résultats

<figure><img src="image_140.png" /><figcaption>Figure 5: NFNet</figcaption></figure>

<figure><img src="image_141.png" /><figcaption>Figure 6: ViT-Face-Expression</figcaption></figure>

<figure><img src="image_142.png" /></figure>
<figure><img src="image_143.png" /></figure>

<figure><img src="image_144.png" /></figure>

<figure><img src="image_145.png" /></figure>

# Conclusion

* StarONNX : Ordonnanceur dynamique pour les tâches d'inférence sur des ressources hétérogènes.

* Amélioration de l'utilisation des ressources et réduction de la latence par rapport à Triton Inference Server.

<figure><img src="image_146.png" /></figure>