De plus en as well as de produits et services tirent parti des capacités de modélisation et de prédiction de l’IA. Cet post présente l’outil nvidia-docker permettant d’intégrer des briques logicielles d’IA (Intelligence Artificielle) dans une architecture de microservices. Le principal avantage exploré ici est l’utilisation des ressources GPU (Graphical Processing Device) du système hôte pour accélérer plusieurs purposes d’IA conteneurisées.
Pour comprendre l’utilité de nvidia-docker, nous commencerons par décrire quel type d’IA peut bénéficier de l’accélération GPU. Dans un second temps nous présenterons remark implémenter l’outil nvidia-docker. Enfin, nous décrirons quels outils sont disponibles pour utiliser l’accélération GPU dans vos applications et remark les utiliser.
Pourquoi utiliser des GPU dans les applications d’IA ?
Dans le domaine de l’intelligence artificielle, nous avons deux principaux sous-domaines qui sont utilisés : l’apprentissage automatique et l’apprentissage profond. Cette dernière fait partie d’une famille additionally significant de méthodes d’apprentissage automatique basées sur réseaux de neurones artificiels.
Dans le cadre du deep discovering, où les opérations sont essentiellement des multiplications matricielles, les GPU sont as well as performants que les CPU (Central Processing Units). C’est pourquoi l’utilisation des GPU s’est développée ces dernières années. En effet, les GPU sont considérés comme le cœur du deep mastering en raison de leur architecture massivement parallèle.
Cependant, les GPU ne peuvent pas exécuter n’importe quel programme. En effet, ils utilisent un langage spécifique (CUDA pour NVIDIA) pour tirer gain de leur architecture. Alors, remark utiliser et communiquer avec les GPU de vos applications ?
La technologie NVIDIA CUDA
NVIDIA CUDA (Compute Unified Product Architecture) est une architecture de calcul parallèle associée à une API pour la programmation des GPU. CUDA traduit le code d’application en un jeu d’instructions que les GPU peuvent exécuter.
Un SDK CUDA et des bibliothèques telles que cuBLAS (Standard Linear Algebra Subroutines) et cuDNN (Deep Neural Community) ont été développés pour communiquer facilement et efficacement avec un GPU. CUDA est disponible en C, C++ et Fortran. Il existe des wrappers pour d’autres langages, notamment Java, Python et R. Par exemple, des bibliothèques d’apprentissage en profondeur telles que TensorFlow et Keras sont basées sur ces systems.
Pourquoi utiliser nvidia-docker ?
Nvidia-docker répond aux besoins des développeurs qui souhaitent ajouter des fonctionnalités d’IA à leurs applications, les conteneuriser et les déployer sur des serveurs alimentés par des GPU NVIDIA.
L’objectif est de mettre en position une architecture permettant le développement et le déploiement de modèles de deep studying dans des services disponibles by means of une API. Ainsi, le taux d’utilisation des ressources GPU est optimisé en les rendant disponibles pour plusieurs circumstances d’application.
De plus, nous bénéficions des avantages des environnements conteneurisés :
- Isolement des occasions de chaque modèle d’IA.
- Colocation de plusieurs modèles avec leurs dépendances spécifiques.
- Colocation d’un même modèle sous plusieurs variations.
- Déploiement cohérent des modèles.
- Suivi des performances du modèle.
Nativement, l’utilisation d’un GPU dans un conteneur nécessite d’installer CUDA dans le conteneur et de donner des privilèges pour accéder à l’appareil. Dans cet esprit, le docker nvidia Un outil a été développé, permettant aux périphériques GPU NVIDIA d’être exposés dans des conteneurs de manière isolée et sécurisée.
Au instant de la rédaction de cet article, la dernière model de nvidia-docker est la v2. Cette variation diffère grandement de la v1 sur les details suivants :
- Version 1: Nvidia-docker est implémenté en superposition à Docker. Autrement dit, pour créer le conteneur, vous deviez utiliser nvidia-docker (Ex :
nvidia-docker operate ...
) qui effectue les actions (entre autres la création de volumes) permettant de voir les périphériques GPU dans le conteneur. - Edition 2: Le déploiement est simplifié avec le remplacement des volumes Docker par l’utilisation des runtimes Docker. En effet, pour lancer un conteneur, il faut maintenant utiliser le runtime NVIDIA by using Docker (Ex :
docker operate --runtime nvidia ...
)
A noter qu’en raison de leur architecture différente, les deux versions ne sont pas compatibles. Une software écrite en v1 doit être réécrite pour la v2.
Configuration de nvidia-docker
Les éléments requis pour utiliser nvidia-docker sont :
- Un environnement d’exécution de conteneur.
- Un GPU disponible.
- La Boîte à outils de conteneur NVIDIA (partie principale de nvidia-docker).
Situations préalables
Docker
Un environnement d’exécution de conteneur est requis pour exécuter le Boîte à outils de conteneur NVIDIA. Docker est le runtime recommandé, mais Podman et containerd sont également pris en cost.
La la documentation officielle donne la procédure d’installation de Docker.
Pilote NVIDIA
Les pilotes sont nécessaires pour utiliser un périphérique GPU. Dans le cas des GPU NVIDIA, les pilotes correspondant à un OS donné peuvent être obtenus auprès du Website page de téléchargement des pilotes NVIDIAen renseignant les informations sur le modèle de GPU.
L’installation des pilotes se fait by way of l’exécutable. Pour Linux, utilisez les commandes suivantes en remplaçant le nom du fichier téléchargé :
chmod +x NVIDIA-Linux-x86_64-470.94.operate
./NVIDIA-Linux-x86_64-470.94.operate
Redémarrez la equipment hôte à la fin de l’installation pour prendre en compte les pilotes installés.
Installer nvidia docker
Nvidia-docker est disponible sur le Webpage du projet GitHub. Pour l’installer, suivez les set up Manuel en fonction de votre serveur et des spécificités de l’architecture.
Nous avons maintenant une infrastructure qui nous permet d’avoir des environnements isolés donnant accès aux ressources GPU. Pour utiliser l’accélération GPU dans les apps, plusieurs outils ont été développés par NVIDIA (liste non exhaustive) :
- Boîte à outils CUDA: un ensemble d’outils pour développer des logiciels/programmes capables d’effectuer des calculs en utilisant à la fois le CPU, la RAM et le GPU. Il peut être utilisé sur les plates-formes x86, Arm et Energy.
- NVIDIA cuDNN: une bibliothèque de primitives pour accélérer les réseaux d’apprentissage en profondeur et optimiser les performances GPU pour les principaux frameworks tels que Tensorflow et Keras.
- NVIDIA cuBLAS: une bibliothèque de sous-programmes d’algèbre linéaire accélérés par GPU.
En utilisant ces outils dans le code d’application, les tâches d’IA et d’algèbre linéaire sont accélérées. Les GPU étant désormais visibles, l’application est capable d’envoyer les données et les opérations à traiter sur le GPU.
La boîte à outils CUDA est l’option de niveau le furthermore bas. Il offre le furthermore de contrôle (mémoire et directions) pour créer des applications personnalisées. Les bibliothèques fournissent une abstraction des fonctionnalités de CUDA. Ils vous permettent de vous concentrer sur le développement de l’application plutôt que sur la mise en œuvre de CUDA.
Une fois tous ces éléments implémentés, l’architecture utilisant le assistance nvidia-docker est prête à l’emploi.
Voici un schéma pour résumer tout ce que nous avons vu :
Conclusion
Nous avons mis en put une architecture permettant l’utilisation des ressources GPU de nos applications dans des environnements isolés. Pour résumer, l’architecture est composée des briques suivantes :
- Système d’exploitation : Linux, Windows…
- Docker : isolation de l’environnement à l’aide de conteneurs Linux
- Pilote NVIDIA : installation du pilote du matériel en problem
- Runtime de conteneur NVIDIA : orchestration des trois précédents
- Purposes sur conteneur Docker :
- CUDA
- cuDNN
- CUBLAS
- Tensorflow/Keras
NVIDIA proceed de développer des outils et des bibliothèques autour des technologies d’IA, dans le but de s’imposer comme un leader. D’autres technologies peuvent compléter nvidia-docker ou peuvent être in addition appropriées que nvidia-docker selon le cas d’utilisation.