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 :
- 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.
- é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 :
- La route vers laquelle nous posterons les spécifications de notre job: /cloud/project/{project ID}/ai/job
- 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.
- 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…)
- Les ressources infra désirées. Nous pouvons les adapter facilement à nos besoins.
- 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 |
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.