+33 146 372 242

Deep Learning en production : Les meilleures pratiques pour exécuter l’inférence d’un modèle

DATA Factory

Quand votre Intelligence Artificielle sort du Labo et doit se confronter à la vraie vie, il faut lui donner l’environnement qui lui permettra de traiter 1 000, 10 000 ou bien plus d’événements avec performance et au meilleur coût.
Dans nos derniers développements, nous avons créé des approches très innovantes à base de Deep Learning pour extraire des informations d’images très variées (Objets, Style, Palette de couleur). Notre projet étant arrivé à maturité, — les phases d’entraînement ont abouti –, nous voulons sélectionner la meilleure approche pour réaliser l’inférence, c’est à dire les prédictions sur les nouvelles données à partir de notre modèle.

Les constats de départs et quelques difficultés à surmonter :

  • Exécuter une inférence sur des architectures à base de CPU est très lent. Il faut environ 100ms pour un modèle basé sur VGG16 par image. (pour une explication de ces modèles, voici un article détaillé )
  • Les GPU sont bien plus efficaces notamment par leur capacité à paralléliser les calculs liés à un modèle.
  • Mais les GPU sont une ressource complexe et coûteuse, qui s’invite plus naturellement sur l’entraînement que sur l’inférence.

Voici une offre du catalogue ‘Artificial Intelligence’ de OVHCloud que nous avons mise à profit : AI Training jobs.

En voici les caractéristiques majeures :

    • Pilotable par des appels à l’API OVH dédiée :

il est facile de réaliser des scrips d’automatisation des processus

  • Démarrage rapide
  • Environments prêts à l’emploi (Python + frameworks Deep Learning)
  • Transfert de fichier rapide
  • Integration naturelle avec l’offre Object Storage d’OVH Cloud

AI Training à l’oeuvre

  • Générer ses éléments de sécurité (credentials) , pour interagir avec l’API (https://eu.api.ovh.com/createToken/ )
  • Déposer un modèle d’inférence (Python) sur le stockage ‘object storage’ d’OVHCloud
  • Préparer l’appel à l’API. 2 points sont à retenir :
    1. spécifiez tous les conteneurs de stockage que vous souhaitez attacher à la tâche, y compris le conteneur « utils » contenant votre script et celui contenant toutes vos images.
    2. écrasez le point d’entrée de Docker pour qu’il exécute votre script (par exemple, « python3 utils/script.py »).
  • Exécutez l’appel … On vous explique ceci un peu plus loin
  • Sit and wait for the job to be done

Illustration d’un espace de travail :

Appeler l’API d’OVHCloud pour démarrer un job ‘AI Training’

Le client python d’OVHCloud est paramétré avec les credentials nous permettant d’utiliser cette route :

  1. La route vers laquelle nous posterons les spécifications de notre job: /cloud/project/{project ID}/ai/job
  2. La commande sera appelée quand le workspace sera prêt. Elle écrase le lancement de Jupyter Lab ou VSCode qu’OVHCloud réalise par défaut.
  3. L’image docker de déploiement de l’environnement. L’image OVHCloud ‘ai-training-one-for-all’ est très utile car elle contient toutes les librairies de base pour les travaux de data science en Python (Pytorch, Tensorflow, Numpy, etc…)
  4. Les ressources infra désirées. Nous pouvons les adapter facilement à nos besoins.
  5. Les conteneurs dans lesquels nous avons déposés les fichiers nécessaires à notre job:
  • Les modèles de Machine Learning
  • Les scripts ainsi que les autres fichiers nécessaires à l’exécution
  • Les données sur lesquelle exécuter l’inférence.

Remarque : tous les conteneurs sont en lecture seule sauf celui des données puisque nous y stockons les résultats. Une bonne pratique pourrait être de télécharger nos données d’entrée en mode lecture seule et de stocker la sortie dans un conteneur séparé.

Les performances, l’efficience.

Nous avons mesuré les performances lors de phases d’entrainement représentatives.

GPU CPU
Frequency ~ 6000 images/min* ~ 238 images/min**
Price rate 1,75€/h HT 0,24€/h HT***
Price ~ 0.5cts / 1000 images ~ 1,7 cts / 1000 images
* Moyenne entre un ensemble de données de 20 000 images et un autre de 130 000 images. ** Déduction d’un échantillon de 1 000 images sur un ordinateur personnel doté de 8 cœurs de processeur. *** Coût d’un job sur un CPU avec 8 coeurs virtuels.

Consommation des ressources d’un job d’inference exécuté sur 130k images

Dans notre cas, on observe qu’on a une première phase où le GPU n’est pas utilisé. Il s’agit du temps nécessaire au chargement et à la préparation des données. Ensuite, on voit que l’utilisation du GPU est hachée. Cela est dû qu’en plus de l’inférence sur GPU, on performe également en parallèle un traitement sur CPU qui interfère avec l’inférence du modèle DeepLearning, notamment pour prétraiter les images. Cependant, on voit bien que le CPU est au maximum de sa capacité, on optimise donc bien l’utilisation des ressources. Antoine ROLLET. Data Scientist.

 

EXPERTS & CONSEILS
La technologie au service des besoins métiers.

DATA FACTORY
Expérimentation, Méthode et Industrialisation.

Pin It on Pinterest