11. Entraînement et déploiement à grande échelle de modèles TensorFlow
- Par Aurélien Géron
Pages 477 à 531
Citer ce chapitre
- GÉRON, Aurélien,
- Géron, Aurélien.
- Géron, A.
Citer ce chapitre
- Géron, A.
- Géron, Aurélien.
- GÉRON, Aurélien,
Notes
-
[1]
Voir le chapitre 2 de l’ouvrage Machine Learning avec Scikit-Learn, A. Géron, Dunod (3e édition, 2023).
-
[2]
Un test A/B consiste à proposer deux versions différentes d’un produit à différents groupes d’utilisateurs afin de déterminer celle qui fonctionne le mieux et d’obtenir d’autres informations.
-
[3]
Google AI Platform (connue précédemment sous l’appellation Google ML Engine) et Google AutoML ont fusionné en 2021 pour former Google Vertex AI.
-
[4]
Une API REST (ou RESTful) utilise des verbes HTTP, comme GET, POST, PUT et DELETE, et des entrées et des sorties au format JSON. Le protocole gRPC est plus complexe, mais aussi plus efficace. Les échanges de données se font par l’intermédiaire de tampons de protocole (voir le chapitre 5).
-
[5]
Si vous ne connaissez pas Docker, sachez que cet outil vous permet de télécharger facilement un ensemble d’applications préparées sous forme d’une image Docker (avec toutes les dépendances et, en général, dans une configuration par défaut adéquate) et de les exécuter sur votre système à l’aide d’un moteur Docker. Lorsque vous exécutez une image, le moteur crée un conteneur Docker qui assure une parfaite isolation entre les applications et votre propre système (vous pouvez lui accorder un accès limité si vous le souhaitez). Le conteneur est comparable à une machine virtuelle, mais il est beaucoup plus rapide et plus léger, car il se fonde directement sur le noyau de l’hôte. L’image n’a donc pas besoin d’inclure ni d’exécuter son propre noyau.
-
[6]
Il existe également des images compatibles GPU, ainsi que d’autres options d’installation. Pour en savoir plus, reportez-vous aux instructions d’installation officielles (https://homl.info/tfserving).
-
[7]
Pour être honnête, ce problème peut être atténué en sérialisant les données et en les encodant au format Base64 préalablement à la création de la requête REST. Par ailleurs, les requêtes REST peuvent être compressées avec gzip, ce qui réduit énormément la taille des informations transmises.
-
[8]
Voir « 19_training_and_deploying_at_scale.ipynb » sur https://homl.info/colab3.
-
[9]
Jetez également un œil à Graph Transform Tool (https://homl.info/tfgtt) de TensorFlow pour modifier et optimiser des graphes de calcul.
-
[10]
Un PWA doit par exemple inclure des icônes de différentes tailles pour les différents types d’appareils mobiles, il doit utiliser le protocole HTTPS, il doit inclure un fichier manifeste contenant des métadonnées telles que le nom de l’application et la couleur de fond.
-
[11]
Vérifiez la documentation TensorFlow où vous trouverez des instructions d’installation détaillées et à jour, car les modifications sont fréquentes.
-
[12]
Nous l’avons vu au chapitre 4, un noyau est l’implémentation d’une opération pour un type de données et un type de processeur spécifiques. Par exemple, il existe un noyau GPU pour l’opération float32 tf.matmul(), mais pas pour int32 tf.matmul() (uniquement un noyau CPU).
-
[13]
Vous pouvez également appeler tf.debugging.set_log_device_placement(True) pour consigner tous les placements sur les processeurs.
-
[14]
Cette option peut se révéler utile pour garantir une parfaite reproductibilité, comme il est expliqué dans la vidéo disponible à l’adresse https://homl.info/repro ; elle est basée sur TF 1.
-
[15]
Au moment de l’écriture de ces lignes, la lecture anticipée des données se fait uniquement vers la mémoire du CPU, mais vous pouvez utiliser tf.data.experimental.prefetch_to_device() pour que la lecture anticipée des données soit effectuée par le processeur de votre choix. Ainsi, le GPU ne perdra pas de temps à attendre le transfert des données.
-
[16]
Lorsque les deux réseaux de neurones convolutifs (ou CNN) sont identiques, ceci s’appelle un réseau de neurones siamois.
-
[17]
Si vous souhaitez aller plus loin en matière de parallélisme du modèle, intéressez-vous à Mesh Tensor-Flow (https://github.com/tensorflow/mesh).
-
[18]
Le terme peut introduire une légère confusion, car il semble indiquer que certains travailleurs (GPU) sont particuliers, ne faisant rien. En réalité, ils sont tous équivalents et s’efforcent de faire partie des plus rapides à chaque étape d’entraînement. Les perdants ne sont pas nécessairement les mêmes à chaque étape (sauf si certains processeurs sont réellement plus lents que d’autres). Toutefois, cela signifie qu’en cas de dysfonctionnement d’un ou deux processeurs, l’entraînement se poursuivra sans problème.
-
[19]
Jianmin Chen et al., « Revisiting Distributed Synchronous SGD » (2016) : https://homl.info/68.
-
[20]
Aaron Harlap et al., « PipeDream: Fast and Efficient Pipeline Parallel DNN Training », arXiv preprint arXiv:1806.03377 (2018) : https://homl.info/pipedream.
-
[21]
Paul Barham et al., « Pathways: Asynchronous Distributed Dataflow for ML », arXiv preprint arXiv:2203.12533 (2022) : https://homl.info/pathways.
-
[22]
Pour de plus amples informations sur les algorithmes AllReduce, consultez le billet rédigé par Yuichiro Ueno (https://homl.info/uenopost) et la page sur l’évolutivité des ressources d’entraînement avec NCCL (https://homl.info/ncclalgo).
-
[23]
Voir « 19_training_and_deploying_at_scale.ipynb » sur https://homl.info/colab3.
-
[24]
Voir « 19_training_and_deploying_at_scale.ipynb » sur https://homl.info/colab3.
Vous disposez d’un beau modèle qui réalise d’époustouflantes prédictions. Très bien, mais que pouvez-vous en faire ? Le mettre en production, évidemment ! Par exemple, vous pourriez tout simplement exécuter le modèle sur un lot de données, en écrivant éventuellement un script qui lance la procédure chaque nuit. Cependant, la mise en production est souvent beaucoup plus complexe. Il est possible que différentes parties de votre infrastructure aient besoin d’appliquer le modèle sur des données en temps réel, auquel cas vous voudrez probablement l’intégrer dans un service web. De cette manière, n’importe quelle partie de l’infrastructure peut interroger le modèle à tout moment en utilisant une simple API REST (ou tout autre protocole).
Mais, au bout d’un certain temps, il faudra certainement réentraîner le modèle sur des données récentes et mettre cette version actualisée en production. Vous devez donc assurer la gestion des versions du modèle, en proposant une transition en douceur d’une version à la suivante, avec la possibilité éventuelle de revenir au modèle précédent en cas de problème, voire exécuter plusieurs modèles différents en parallèle pour effectuer des tests A/B. En cas de succès de votre produit, votre service va commencer à recevoir un grand nombre de requêtes par seconde (QPS, queries per second) et devra changer d’échelle pour supporter la charge. Nous le verrons dans ce chapitre, une bonne solution pour augmenter l’échelle de votre service consiste à utiliser TF Serving, soit sur votre propre infrastructure matérielle, soit au travers d’un service de cloud comme Google Vertex A…
Date de mise en ligne : 04/10/2024
Ce chapitre est en accès conditionnel
Acheter cet ouvrage
38,99 €