Déployez vos applications d’IA conteneurisées avec nvidia-docker
De moreover en in addition de produits et solutions tirent parti des capacités de modélisation et de prédiction de l’IA. Cet posting 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 Unit) 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 sort d’IA peut bénéficier de l’accélération GPU. Dans un second temps nous présenterons comment implémenter l’outil nvidia-docker. Enfin, nous décrirons quels outils sont disponibles pour utiliser l’accélération GPU dans vos apps et remark les utiliser.
Pourquoi utiliser des GPU dans les purposes 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 in addition significant de méthodes d’apprentissage automatique basées sur réseaux de neurones artificiels.
Dans le cadre du deep finding out, où les opérations sont essentiellement des multiplications matricielles, les GPU sont plus performants que les CPU (Central Processing Models). 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 finding out 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 parti de leur architecture. Alors, remark utiliser et communiquer avec les GPU de vos applications ?
La technologie NVIDIA CUDA
NVIDIA CUDA (Compute Unified Machine 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 (Basic 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 area une architecture permettant le développement et le déploiement de modèles de deep understanding dans des companies 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 circumstances 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 minute de la rédaction de cet article, la dernière version de nvidia-docker est la v2. Cette variation diffère grandement de la v1 sur les details suivants :
- Model 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. - Variation 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 variations 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).
Conditions 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 charge.
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 Site de téléchargement des pilotes NVIDIAen renseignant les informations sur le modèle de GPU.
L’installation des pilotes se fait by means 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.run
./NVIDIA-Linux-x86_64-470.94.operate
Redémarrez la machine hôte à la fin de l’installation pour prendre en compte les pilotes installés.
Installer nvidia docker
Nvidia-docker est disponible sur le Web site 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 programs, 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 Electricity.
- 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 plus 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 :
Summary
Nous avons mis en place 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 concern
- Runtime de conteneur NVIDIA : orchestration des trois précédents
- Programs sur conteneur Docker :
- CUDA
- cuDNN
- CUBLAS
- Tensorflow/Keras
NVIDIA continue 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 plus appropriées que nvidia-docker selon le cas d’utilisation.