Étape 2. Création des scripts d'exécution - AWS Conseils prescriptifs

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Étape 2. Création des scripts d'exécution

Création des scripts d'exécution.

Au cours de cette étape, vous intégrez le modèle que vous avez développé à l'étape 1 et son code d'assistance associé dans une plate-forme de machine learning pour une formation et une inférence prêtes pour la production. Plus précisément, cela implique le développement de scripts d'exécution afin que le modèle puisse être intégré à l' SageMaker IA. Ces scripts Python autonomes incluent des fonctions de rappel SageMaker AI prédéfinies et des variables d'environnement. Ils sont exécutés dans un conteneur d' SageMaker IA hébergé sur une instance Amazon Elastic Compute Cloud (Amazon EC2). La documentation du SDK Amazon SageMaker AI Python fournit des informations détaillées sur la façon dont ces rappels et ces configurations auxiliaires fonctionnent ensemble à des fins d'entraînement et d'inférence. (Par exemple, voir Préparer un script de formation scikit-learn et Déployer un modèle scikit-learn dans la documentation de l'IA.) SageMaker Les sections suivantes fournissent des recommandations supplémentaires pour le développement de scripts d'exécution ML, basées sur notre expérience de travail avec AWS les clients.

Utilisation de tâches de traitement

SageMaker L'IA propose deux options pour effectuer une inférence de modèle en mode batch. Vous pouvez utiliser une tâche de traitement par SageMaker IA ou une tâche de transformation par lots. Chaque option présente des avantages et des inconvénients.

Une tâche de traitement consiste en un fichier Python qui s'exécute dans un conteneur SageMaker AI. La tâche de traitement consiste en la logique que vous avez insérée dans votre fichier Python. Il présente les avantages suivants :

  • Lorsque vous comprenez la logique de base d'une tâche de formation, les tâches de traitement sont simples à configurer et à comprendre. Ils partagent les mêmes abstractions que les tâches de formation (par exemple, le réglage du nombre d'instances et de la distribution des données).

  • Les data scientists et les ingénieurs du machine learning ont un contrôle total sur les options de manipulation des données.

  • Le data scientist n'a pas à gérer la logique des composants d'E/S, à l'exception des fonctionnalités de lecture/écriture familières.

  • Il est un peu plus facile d'exécuter les fichiers dans des environnements autres que l'SageMaker IA, ce qui facilite le développement rapide et les tests locaux.

  • En cas d'erreur, une tâche de traitement échoue dès que le script échoue, et il n'y a aucune attente imprévue pour une nouvelle tentative.

D'autre part, les tâches de transformation par lots sont une extension du concept de point de terminaison basé sur l' SageMaker IA. Au moment de l'exécution, ces tâches importent des fonctions de rappel, qui gèrent ensuite les E/S nécessaires à la lecture des données, au chargement du modèle et à la réalisation des prédictions. Les tâches de transformation par lots présentent les avantages suivants :

  • Ils utilisent une abstraction de distribution de données différente de celle utilisée par les tâches de formation.

  • Ils utilisent le même fichier de base et la même structure de fonctions pour l'inférence par lots et l'inférence en temps réel, ce qui est pratique.

  • Ils sont dotés d'un mécanisme de tolérance aux pannes intégré basé sur les nouvelles tentatives. Par exemple, si une erreur se produit sur un lot d'enregistrements, celui-ci réessaiera plusieurs fois avant que la tâche ne soit interrompue pour échec.

En raison de sa transparence, de sa facilité d'utilisation dans plusieurs environnements et de son abstraction partagée avec les tâches de formation, nous avons décidé d'utiliser la tâche de traitement plutôt que la tâche de transformation par lots dans l'architecture de référence présentée dans ce guide.

Vous devez exécuter les scripts d'exécution Python localement avant de les déployer dans le cloud. Plus précisément, nous vous recommandons d'utiliser la clause main guard lorsque vous structurez vos scripts Python et que vous effectuez des tests unitaires.

Utilisation de la clause de garde principale

Utilisez une clause main guard pour prendre en charge l'importation de modules et pour exécuter votre script Python. L'exécution individuelle de scripts Python est utile pour le débogage et l'isolation des problèmes dans le pipeline ML. Nous vous recommandons la procédure suivante :

  • Utilisez un analyseur d'arguments dans les fichiers de traitement Python pour spécifier les fichiers d'entrée/sortie et leur emplacement.

  • Fournissez un guide principal et des fonctions de test pour chaque fichier Python.

  • Après avoir testé un fichier Python, intégrez-le aux différentes étapes du pipeline ML, que vous utilisiez un AWS Step Functions modèle ou une tâche de traitement basée sur l' SageMaker IA.

  • Utilisez les instructions Assert dans les sections critiques du script pour faciliter les tests et le débogage. Par exemple, vous pouvez utiliser une instruction Assert pour garantir que le nombre d'entités du jeu de données est constant après le chargement.

Tests d'unité

Les tests unitaires des scripts d'exécution écrits pour le pipeline sont une tâche importante qui est souvent ignorée dans le développement d'un pipeline ML. Cela s'explique par le fait que l'apprentissage automatique et la science des données sont des domaines relativement nouveaux et ont mis du temps à adopter des pratiques d'ingénierie logicielle bien établies, telles que les tests unitaires. Étant donné que le pipeline ML sera utilisé dans l'environnement de production, il est essentiel de tester le code du pipeline avant d'appliquer le modèle ML à des applications réelles.

Les tests unitaires du script d'exécution offrent également les avantages uniques suivants pour les modèles de machine learning :

  • Il empêche les transformations inattendues des données. La plupart des pipelines de machine learning impliquent de nombreuses transformations de données. Il est donc essentiel que ces transformations fonctionnent comme prévu.

  • Il valide la reproductibilité du code. Tout caractère aléatoire du code peut être détecté par des tests unitaires avec différents cas d'utilisation.

  • Il renforce la modularité du code. Les tests unitaires sont généralement associés à la mesure de couverture des tests, qui est le degré auquel une suite de tests particulière (un ensemble de cas de test) exécute le code source d'un programme. Pour obtenir une couverture de test élevée, les développeurs modularisent le code, car il est difficile d'écrire des tests unitaires pour une grande quantité de code sans le décomposer en fonctions ou en classes.

  • Cela empêche l'introduction de code de mauvaise qualité ou d'erreurs dans la production.

Nous vous recommandons d'utiliser un framework de test unitaire mature tel que pytest pour écrire les cas de tests unitaires, car il est plus facile de gérer des tests unitaires approfondis au sein d'un framework.

Important

Les tests unitaires ne peuvent pas garantir que tous les cas critiques sont testés, mais ils peuvent vous aider à éviter les erreurs de manière proactive avant de déployer le modèle. Nous vous recommandons également de surveiller le modèle après son déploiement, afin de garantir l'excellence opérationnelle.