Mettre en œuvre le point de contrôle avec TensorFlow pour la formation sur les points gérés Amazon SageMaker

Nœud source: 808262

Les clients nous demandent souvent comment réduire leurs coûts lorsqu'ils organisent une formation en apprentissage profond sur AWS. Former des modèles d'apprentissage profond avec des bibliothèques telles que TensorFlow, PyTorchet une Apache MXNet nécessite généralement un accès à Instances GPU, qui sont des types d'instances AWS qui fournissent un accès aux GPU NVIDIA avec des milliers de cœurs de calcul. Les types d'instances GPU peuvent être plus chers que les autres Cloud de calcul élastique Amazon (Amazon EC2), l'optimisation de l'utilisation de ces types d'instances est donc une priorité pour les clients ainsi qu'une bonne pratique globale pour les charges de travail bien architecturées.

Amazon Sage Maker est un service entièrement géré qui offre à chaque développeur et scientifique des données la possibilité de préparer, créer, former et déployer rapidement des modèles d'apprentissage automatique (ML). SageMaker supprime les tâches lourdes de chaque étape du processus ML pour faciliter le développement de modèles de haute qualité. SageMaker fournit tous les composants utilisés pour le ML dans un seul ensemble d'outils afin que les modèles arrivent plus rapidement en production avec moins d'effort et à moindre coût.

Instances Spot Amazon EC2 offrent une capacité de calcul supplémentaire disponible dans le cloud AWS à des remises importantes par rapport aux prix à la demande. Amazon EC2 peut interrompre les instances ponctuelles avec 2 minutes de notification lorsque le service a besoin de récupérer la capacité. Vous pouvez utiliser des instances ponctuelles pour diverses applications flexibles et tolérantes aux pannes. Quelques exemples sont l'analyse, les charges de travail conteneurisées, les serveurs Web sans état, CI / CD, la formation et l'inférence de modèles ML et d'autres charges de travail de test et de développement. La tarification des instances Spot rend les GPU hautes performances beaucoup plus abordables pour les chercheurs et les développeurs en apprentissage profond qui exécutent des tâches de formation.

L'un des principaux avantages de SageMaker est qu'il vous libère de toute gestion d'infrastructure, quelle que soit l'échelle à laquelle vous travaillez. Par exemple, au lieu d'avoir à configurer et à gérer des clusters d'entraînement complexes, vous indiquez simplement à SageMaker quel type d'instance EC2 utiliser et combien vous en avez besoin. Les instances appropriées sont ensuite créées à la demande, configurées et arrêtées automatiquement lorsque la tâche de formation est terminée. Comme Clients SageMaker ont vite compris, cela signifie qu'ils ne paient que pour ce qu'ils utilisent. La création, la formation et le déploiement de modèles de ML sont facturés à la seconde, sans frais minimum et sans engagement initial. SageMaker peut également utiliser des instances ponctuelles EC2 pour les tâches de formation, ce qui optimise le coût du calcul utilisé pour la formation des modèles d'apprentissage en profondeur.

Dans cet article, nous expliquons le processus d'entraînement d'un modèle TensorFlow avec Formation ponctuelle gérée dans SageMaker. Nous parcourons les étapes nécessaires pour configurer et exécuter un travail de formation qui enregistre la progression de la formation dans Service de stockage simple Amazon (Amazon S3) et redémarre la tâche d'entraînement à partir du dernier point de contrôle si une instance EC2 est interrompue. Cela permet à nos tâches de formation de continuer à partir du même point avant que l'interruption ne se produise. Enfin, nous voyons les économies que nous avons réalisées en exécutant notre tâche de formation sur des instances ponctuelles à l'aide de la formation ponctuelle gérée dans SageMaker.

Formation ponctuelle gérée dans SageMaker

SageMaker facilite l'entraînement des modèles ML à l'aide d'instances Spot EC2 gérées. Managed Spot Training peut optimiser le coût des modèles de formation jusqu'à 90% par rapport aux instances à la demande. Avec seulement quelques lignes de code, SageMaker peut gérer les interruptions Spot en votre nom.

La formation ponctuelle gérée utilise des instances ponctuelles EC2 pour exécuter des tâches de formation au lieu d'instances à la demande. Vous pouvez spécifier les tâches d'entraînement qui utilisent des instances ponctuelles et une condition d'arrêt qui spécifie la durée pendant laquelle SageMaker attend la fin d'une tâche d'entraînement à l'aide des instances ponctuelles EC2. Les métriques et les journaux générés pendant les exécutions d'entraînement sont disponibles dans Amazon Cloud Watch.

Managed Spot Training est disponible dans toutes les configurations de formation:

Interruptions et points de contrôle

Il y a une différence importante lorsque vous travaillez avec Managed Spot Training. Contrairement aux instances à la demande qui devraient être disponibles jusqu'à ce qu'une tâche de formation soit terminée, les instances ponctuelles peuvent être récupérées chaque fois qu'Amazon EC2 a besoin de la capacité.

SageMaker, en tant que service entièrement géré, gère automatiquement le cycle de vie des instances Spot. Il interrompt la tâche d'entraînement, tente à nouveau d'obtenir des instances ponctuelles et redémarre ou reprend la tâche d'entraînement.

Pour éviter de redémarrer une tâche d'entraînement à partir de zéro si elle est interrompue, nous vous recommandons fortement de mettre en œuvre point de contrôle, une technique qui enregistre le modèle dans la formation à intervalles réguliers. Lorsque vous utilisez le point de contrôle, vous pouvez reprendre une tâche d'entraînement à partir d'un moment bien défini, en continuant à partir du modèle partiellement formé le plus récent et en évitant de partir du début et de perdre du temps et de l'argent de calcul.

Pour implémenter le point de contrôle, nous devons faire une distinction sur le type d'algorithme que vous utilisez:

  • Cadres intégrés et modèles personnalisés - Vous avez un contrôle total sur le code de formation. Assurez-vous simplement d'utiliser les API appropriées pour enregistrer régulièrement les points de contrôle du modèle sur Amazon S3, en utilisant l'emplacement que vous avez défini dans le CheckpointConfig paramètre et transmis au SageMaker Estimator. TensorFlow utilise des points de contrôle par défaut. Pour d'autres frameworks, consultez notre exemples de cahiers ainsi que Utiliser les frameworks d'apprentissage machine, Python et R avec Amazon SageMaker.
  • Algorithmes intégrés - Les algorithmes de vision par ordinateur prennent en charge le point de contrôle (détection d'objets, segmentation sémantiqueet une classification d'image). Parce qu'ils ont tendance à s'entraîner sur de grands ensembles de données et à fonctionner plus longtemps que les autres algorithmes, ils ont une probabilité plus élevée d'être interrompus. le XGBoost L'algorithme intégré prend également en charge le point de contrôle.

Modèle de classification d'images TensorFlow avec Managed Spot Training

Pour faire une démonstration de Managed Spot Training et de points de contrôle, je vous guide à travers les étapes nécessaires pour entraîner un modèle de classification d'image TensorFlow. Pour vous assurer que vos scripts de formation peuvent tirer parti de la formation ponctuelle gérée par SageMaker, nous devons implémenter les éléments suivants:

  • Sauvegarde fréquente des points de contrôle, économisant ainsi les points de contrôle à chaque époque
  • La possibilité de reprendre la formation à partir des points de contrôle si des points de contrôle existent

Enregistrer les points de contrôle

SageMaker sauvegarde et synchronise automatiquement les fichiers de point de contrôle générés par votre script d'entraînement vers Amazon S3. Par conséquent, vous devez vous assurer que votre script d'entraînement enregistre les points de contrôle dans un répertoire de points de contrôle local sur le conteneur Docker qui exécute la formation. L'emplacement par défaut pour enregistrer les fichiers de point de contrôle est /opt/ml/checkpointset SageMaker synchronise ces fichiers avec le compartiment S3 spécifique. Les emplacements des points de contrôle locaux et S3 sont personnalisables.

L'enregistrement des points de contrôle à l'aide de Keras est très simple. Vous devez créer une instance du ModelCheckpoint callback et enregistrez-la avec le modèle en la passant au fit() la fonction.

Vous pouvez trouver le code d'implémentation complet sur le GitHub repo.

Voici le code pertinent:

callbacks = [] callbacks.append(ModelCheckpoint(args.checkpoint_path + '/checkpoint-{epoch}.h5')) logging.info("Starting training from epoch: {}".format(initial_epoch_number+1)) model.fit(x=train_dataset[0], y=train_dataset[1], steps_per_epoch=(num_examples_per_epoch('train') epochs=args.epochs, initial_epoch=initial_epoch_number, validation_data=validation_dataset, validation_steps=(num_examples_per_epoch('validation') callbacks=callbacks) 

Les noms des fichiers de point de contrôle enregistrés sont les suivants: checkpoint-1.h5, checkpoint-2.h5, checkpoint-3.h5, Et ainsi de suite.

Pour ce post, je passe initial_epoch, que vous ne définissez normalement pas. Cela nous permet de reprendre l'entraînement à partir d'un certain nombre d'époques et est pratique lorsque vous avez déjà des fichiers de point de contrôle.

Le chemin du point de contrôle est configurable car nous l'obtenons à partir de args.checkpoint_path dans le main fonction:

if __name__ == '__main__': parser = argparse.ArgumentParser() ... parser.add_argument("--checkpoint-path",type=str,default="/opt/ml/checkpoints",help="Path where checkpoints will be saved.") ... args = parser.parse_args() 

Reprendre l'entraînement à partir des fichiers de point de contrôle

Lorsque la capacité Spot redevient disponible après l'interruption de Spot, SageMaker lance une nouvelle instance Spot, instancie un conteneur Docker avec votre script d'entraînement, copie votre ensemble de données et vos fichiers de point de contrôle d'Amazon S3 vers le conteneur et exécute vos scripts d'entraînement.

Votre script doit implémenter la reprise de l'entraînement à partir des fichiers de point de contrôle, sinon votre script d'entraînement redémarre l'entraînement à partir de zéro. Vous pouvez implémenter un load_model_from_checkpoints fonction comme indiqué dans le code suivant. Il prend le chemin des fichiers de point de contrôle local (/opt/ml/checkpoints étant la valeur par défaut) et renvoie un modèle chargé à partir du dernier point de contrôle et du numéro d'époque associé.

Vous pouvez trouver le code d'implémentation complet sur le GitHub repo.

Voici le code pertinent:

def load_model_from_checkpoints(checkpoint_path): checkpoint_files = [file for file in os.listdir(checkpoint_path) if file.endswith('.' + 'h5')] logging.info('--------------------------------------------') logging.info("Available checkpoint files: {}".format(checkpoint_files)) epoch_numbers = [re.search('(.*[0-9])(?=.)',file).group() for file in checkpoint_files] max_epoch_number = max(epoch_numbers) max_epoch_index = epoch_numbers.index(max_epoch_number) max_epoch_filename = checkpoint_files[max_epoch_index] logging.info('Latest epoch checkpoint file name: {}'.format(max_epoch_filename)) logging.info('Resuming training from epoch: {}'.format(int(max_epoch_number)+1)) logging.info('---------------------------------------------') resumed_model_from_checkpoints = load_model(f'{checkpoint_path}/{max_epoch_filename}') return resumed_model_from_checkpoints, int(max_epoch_number) 

Formation ponctuelle gérée avec un estimateur TensorFlow

Vous pouvez lancer des tâches de formation SageMaker à partir de vos instances d'ordinateur portable, de bureau, d'instance EC2 ou de notebook SageMaker. Assurez-vous que le SDK SageMaker Python est installé et que vous disposez des autorisations utilisateur appropriées pour exécuter les tâches de formation SageMaker.

Pour exécuter une tâche Managed Spot Training, vous devez spécifier quelques options supplémentaires pour votre SageMaker standard Estimator appel de fonction:

  • use_spot_instances - Spécifie s'il faut utiliser SageMaker Managed Spot Training pour la formation. S'il est activé, vous devez également définir le train_max_wait groupe de raisonnement automatisé (ARG).
  • max_attente - Délai d'attente en secondes pour les instances d'entraînement Spot (par défaut: None). Après ce laps de temps, SageMaker arrête d'attendre que les instances Spot deviennent disponibles ou que la tâche de formation se termine. D'après les exécutions précédentes, je sais que le travail d'entraînement se terminera dans 4 minutes, donc je l'ai réglé à 600 secondes.
  • max_run - Timeout en secondes pour l'entraînement (par défaut: 24 * 60 * 60). Après ce laps de temps, SageMaker arrête la tâche quel que soit son état actuel. Je suis prêt à supporter le double du temps nécessaire à une formation avec On-Demand, donc j'attribue 20 minutes de temps de formation au total à l'aide de Spot.
  • point de contrôle_s3_uri - L'URI S3 dans laquelle conserver les points de contrôle que l'algorithme persiste (le cas échéant) pendant l'entraînement.

Vous pouvez trouver le code d'implémentation complet sur le GitHub repo.

Voici le code pertinent:

use_spot_instances = True max_run=600 max_wait = 1200 checkpoint_suffix = str(uuid.uuid4())[:8] checkpoint_s3_uri = 's3://{}/checkpoint-{}'.format(bucket, checkpoint_suffix) hyperparameters = {'epochs': 5, 'batch-size': 256} spot_estimator = TensorFlow(entry_point='cifar10_keras_main.py', source_dir='source_dir', metric_definitions=metric_definitions, hyperparameters=hyperparameters, role=role, framework_version='1.15.2', py_version='py3', instance_count=1, instance_type='ml.p3.2xlarge', base_job_name='cifar10-tf-spot-1st-run', tags=tags, checkpoint_s3_uri=checkpoint_s3_uri, use_spot_instances=use_spot_instances, max_run=max_run, max_wait=max_wait) 

Ce sont tous les changements que vous devez apporter pour réduire considérablement le coût de la formation en ML.

Pour surveiller votre tâche d'entraînement et afficher les économies réalisées, vous pouvez consulter les journaux de votre bloc-notes Jupyter.

Vers la fin du travail, vous devriez voir deux lignes de sortie:

  • Secondes d'entraînement: X - Le temps de calcul réel passé par votre travail de formation
  • Secondes facturables: O - L'heure pour laquelle vous êtes facturé après l'application de la remise Spot.

Si vous avez activé use_spot_instances, vous devriez voir une différence notable entre X et Y, ce qui signifie les économies que vous obtenez en utilisant Managed Spot Training. Cela se reflète dans une ligne supplémentaire:

  • Économies sur la formation ponctuelle gérée - Calculé comme (1-Y / X) * 100%

La capture d'écran suivante montre les journaux de sortie de notre Carnet Jupyter:

Une fois la formation terminée, vous pouvez également accéder au Emplois de formation sur la console SageMaker et choisissez votre tâche d'entraînement pour voir combien vous avez économisé.

Pour cet exemple de travail d'entraînement d'un modèle utilisant TensorFlow, mon travail d'entraînement a duré 144 secondes, mais je ne suis facturé que pour 43 secondes, donc pour un entraînement de 5 époques sur une instance de GPU ml.p3.2xlarge, j'ai pu économiser 70% sur le coût de la formation!

Confirmez que les points de contrôle et la récupération fonctionnent lorsque votre travail d'entraînement est interrompu

Comment pouvez-vous tester si votre travail d'entraînement reprendra correctement en cas d'interruption ponctuelle?

Si vous êtes familiarisé avec l'exécution d'instances ponctuelles EC2, vous savez que vous pouvez simuler le comportement de votre application lors d'une interruption ponctuelle en suivant le bonnes pratiques recommandées. Cependant, étant donné que SageMaker est un service géré et gère le cycle de vie des instances EC2 en votre nom, vous ne pouvez pas arrêter manuellement une instance de formation SageMaker. Votre seule option est d'arrêter tout le travail de formation.

Vous pouvez toujours tester le comportement de votre code lors de la reprise d'un entraînement incomplet en exécutant une tâche d'entraînement plus courte, puis en utilisant les points de contrôle générés par cette tâche d'entraînement comme entrées pour une tâche d'entraînement plus longue. Pour ce faire, exécutez d'abord une tâche de formation ponctuelle gérée par SageMaker pendant un nombre d'époques spécifié, comme décrit dans la section précédente. Disons que vous exécutez une formation pendant cinq époques. SageMaker aurait sauvegardé vos fichiers de point de contrôle à l'emplacement S3 spécifié pour les cinq époques.

Vous pouvez accéder à la page des détails de la tâche d'entraînement sur la console SageMaker pour voir le chemin de sortie S3 de la configuration du point de contrôle.

Choisissez le lien du chemin de sortie S3 pour accéder au compartiment S3 de point de contrôle et vérifiez que cinq fichiers de point de contrôle y sont disponibles.

Maintenant, exécutez une deuxième course d'entraînement avec 10 époques. Vous devez fournir l'emplacement du point de contrôle du premier travail à checkpoint_s3_uri afin que le travail de formation puisse utiliser ces points de contrôle comme entrées pour le deuxième travail de formation.

Vous pouvez trouver le code d'implémentation complet dans le GitHub repo.

Voici le code pertinent:

hyperparameters = {'epochs': 10, 'batch-size': 256} spot_estimator = TensorFlow(entry_point='cifar10_keras_main.py', source_dir='source_dir', metric_definitions=metric_definitions, hyperparameters=hyperparameters, role=role, framework_version='1.15.2', py_version='py3', instance_count=1, instance_type='ml.p3.2xlarge', base_job_name='cifar10-tf-spot-2nd-run', tags=tags, checkpoint_s3_uri=checkpoint_s3_uri, use_spot_instances=use_spot_instances, max_run=max_run, max_wait=max_wait) 

En fournissant checkpoint_s3_uri avec les points de contrôle de votre travail précédent, vous demandez à SageMaker de copier ces points de contrôle dans le conteneur de votre nouveau travail. Votre script d'entraînement charge ensuite le dernier point de contrôle et reprend l'entraînement. La capture d'écran suivante montre que la formation reprend à partir de la sixième époque.

Pour confirmer que tous les fichiers de point de contrôle ont été créés, accédez au même compartiment S3. Cette fois, vous pouvez voir que 10 fichiers de point de contrôle sont disponibles.

La principale différence entre la simulation d'une interruption de cette manière et la façon dont SageMaker gère les interruptions est que vous créez une nouvelle tâche d'entraînement pour tester votre code. Dans le cas d'interruptions ponctuelles, SageMaker reprend simplement le travail interrompu existant.

Implémentez le point de contrôle avec PyTorch, MXNet et XGBoost intégré et en mode script

Les étapes indiquées dans l'exemple TensorFlow sont fondamentalement les mêmes pour PyTorch et MXNet. Le code pour enregistrer les points de contrôle et les charger pour reprendre l'entraînement est différent.

Vous pouvez voir des exemples complets pour TensorFlow 1.x / 2.x, PyTorch, MXNet et XGBoost intégré et mode script dans le GitHub repo.

Conclusions et prochaines étapes

Dans cet article, nous avons formé un modèle de classification d'images TensorFlow à l'aide de SageMaker Managed Spot Training. Nous avons enregistré des points de contrôle localement dans le conteneur et chargé des points de contrôle pour reprendre l'entraînement s'ils existaient. SageMaker se charge de synchroniser les points de contrôle avec Amazon S3 et le conteneur de formation. Nous avons simulé une interruption Spot en exécutant Managed Spot Training avec 5 époques, puis avons exécuté un second Managed Spot Training Job avec 10 époques, en configurant le compartiment S3 des points de contrôle du travail précédent. Cela a conduit la tâche d'entraînement à charger les points de contrôle stockés dans Amazon S3 et à reprendre à partir de la sixième époque.

Il est facile d'économiser sur les coûts de formation avec SageMaker Managed Spot Training. Avec des changements de code minimes, vous pouvez également économiser plus de 70% lors de la formation de vos modèles d'apprentissage en profondeur.

À l'étape suivante, essayez de modifier votre propre script TensorFlow, PyTorch ou MXNet pour implémenter le point de contrôle, puis exécutez une formation sur les points gérés dans SageMaker pour voir que les fichiers de points de contrôle sont créés dans le compartiment S3 que vous avez spécifié. Faites-nous savoir comment vous faites dans les commentaires!


À propos de l’auteur

Eitan Sela est un architecte de solutions avec Amazon Web Services. Il travaille avec les clients AWS pour fournir des conseils et une assistance technique, les aidant à améliorer la valeur de leurs solutions lors de l'utilisation d'AWS. Eitan aide également les clients à créer et à exploiter des solutions d'apprentissage automatique sur AWS. Dans ses temps libres, Eitan aime faire du jogging et lire les derniers articles sur l'apprentissage automatique.

Source : https://aws.amazon.com/blogs/machine-learning/implement-checkpointing-with-tensorflow-for-amazon-sagemaker-managed-spot-training/

Horodatage:

Plus de Blog sur l'apprentissage automatique AWS