Configurer et envoyer des travaux d’apprentissage

S’APPLIQUE À :SDK Python azureml v1

Dans cet article, vous allez apprendre à configurer et à soumettre des travaux Azure Machine Learning pour entraîner vos modèles. Des extraits de code décrivent les éléments clés de la configuration et de la soumission d'un script de formation. Utilisez ensuite l'un des exemples de notebooks pour accéder aux exemples fonctionnels complets de bout en bout.

Lors de l’entraînement, il est courant de démarrer sur votre ordinateur local, puis d’effectuer un scale-out vers un cluster cloud. Avec Azure Machine Learning, vous pouvez exécuter votre script sur différentes cibles de calcul sans avoir à modifier votre script de formation.

Il vous suffit de définir l’environnement pour chaque cible de calcul dans une configuration d’un travail de script. Quand vous souhaitez ensuite exécuter votre expérience de formation sur une autre cible de calcul, spécifiez la configuration du travail pour celle-ci.

Prérequis

Qu’est-ce qu’une configuration d’exécution de script ?

Un objet ScriptRunConfig sert à configurer les informations nécessaires pour envoyer un travail d’apprentissage dans le cadre de l’expérience.

Vous soumettez votre expérience de formation à l’aide d’un objet ScriptRunConfig. Cet objet inclut ce qui suit :

  • source_directory : Répertoire source contenant votre script d’apprentissage
  • script : script d’entraînement à exécuter
  • compute_target : cible de calcul sur laquelle effectuer l’exécution
  • environment : environnement à utiliser lors de l’exécution du script
  • Et d’autres options configurables (consultez la documentation de référence pour plus d’informations)

Entraîner votre modèle

Le modèle de code pour envoyer un travail d’apprentissage est identique pour tous les types de cibles de calcul :

  1. Créer une expérience à exécuter
  2. Créer un environnement dans lequel le script s’exécute
  3. Créer un objet ScriptRunConfig, qui spécifie la cible de calcul et l’environnement
  4. Envoi du travail
  5. Attendre la fin du travail

Vous pouvez également :

Créer une expérience

Créez une expérience dans votre espace de travail. Une expérience est un conteneur léger qui permet d’organiser l’envoi de travaux et d’effectuer le suivi du code.

S’APPLIQUE À :SDK Python azureml v1

from azureml.core import Experiment

experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)

Sélectionner une cible de calcul

Sélectionnez la cible de calcul sur laquelle votre script d’entraînement sera exécuté. Si aucune cible de calcul n’est spécifiée dans l’objet ScriptRunConfig, ou si compute_target='local', Azure Machine Learning exécute votre script localement.

L’exemple de code fourni dans cet article suppose que vous avez déjà créé une cible de calcul my_compute_target comme indiqué dans la section « Prérequis ».

Notes

  • Azure Databricks n’est pas pris en charge comme cible de calcul pour la formation des modèles. Vous pouvez utiliser Azure Databricks pour les tâches de préparation des données et de déploiement.
  • Pour créer et attacher une cible de calcul pour l’apprentissage sur un cluster Kubernetes avec Azure Arc, consultez Configurer Machine Learning avec Azure Arc

Créer un environnement

Les environnements Azure Machine Learning sont une encapsulation de l’environnement dans lequel votre formation Machine Learning se produit. Ils spécifient les packages, image Docker, variables d’environnement et paramètres logiciels Python autour de vos scripts d’entraînement et de scoring. Ils spécifient également les temps d’exécution (Python, Spark ou Docker).

Vous pouvez définir votre propre environnement ou utiliser un environnement organisé Azure Machine Learning. Les environnements organisés sont des environnements prédéfinis qui sont disponibles dans votre espace de travail par défaut. Ces environnements s’appuient sur des images Docker mises en cache, ce qui réduit le coût de préparation des travaux. Consultez Environnements organisés Azure Machine Learning pour obtenir la liste complète des environnements organisés disponibles.

Pour une cible de calcul à distance, vous pouvez utiliser l’un de ces environnements organisés courants pour commencer :

S’APPLIQUE À :SDK Python azureml v1

from azureml.core import Workspace, Environment

ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")

Pour plus d’informations et pour obtenir des détails sur les environnements, consultez Créer et utiliser des environnements logiciels dans Azure Machine Learning.

Cible de calcul locale

Si votre cible de calcul est votre ordinateur local, vous devez vérifier que tous les packages nécessaires sont disponibles dans l’environnement Python où le script s’exécute. Utilisez python.user_managed_dependencies pour utiliser votre environnement Python actuel (ou celui sous le chemin d’accès que vous spécifiez).

S’APPLIQUE À :SDK Python azureml v1

from azureml.core import Environment

myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True

# You can choose a specific Python environment by pointing to a Python path 
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'

Créer la configuration du travail de script

Maintenant que vous avez une cible de calcul (my_compute_target, voir Prérequis) et un environnement (myenv, voir Créer un environnement), créez une configuration de travail de script qui exécute votre script d’entraînement (train.py) dans votre répertoire project_folder :

S’APPLIQUE À :SDK Python azureml v1

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='train.py',
                      compute_target=my_compute_target,
                      environment=myenv)

Si vous ne spécifiez pas d’environnement, un environnement par défaut est créé pour vous.

Si vous souhaitez passer des arguments de ligne de commande à votre script d’entraînement, vous pouvez les spécifier par le biais du paramètre arguments du constructeur ScriptRunConfig, par exemple, arguments=['--arg1', arg1_val, '--arg2', arg2_val].

Si vous souhaitez remplacer la durée maximale par défaut autorisée pour le travail, vous pouvez le faire avec le paramètre max_run_duration_seconds. Le système tente d’annuler automatiquement le travail s’il prend plus de temps que cette valeur.

Spécifier une configuration de travail distribué

Si vous souhaitez exécuter une tâche d’entraînement distribué, renseignez la configuration spécifique à la tâche distribuée au niveau du paramètre distributed_job_config. Les types de configuration pris en charge sont les suivants : MpiConfiguration, TensorflowConfiguration et PyTorchConfiguration.

Pour plus d’informations et des exemples sur l’exécution des travaux distribués Horovod, TensorFlow et PyTorch, consultez :

Soumettre l’expérimentation

S’APPLIQUE À :Kit de développement logiciel (SDK) Python azureml v1

run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)

Important

Quand vous envoyez le travail d’entraînement, un instantané du répertoire contenant vos scripts d’entraînement est créé et envoyé à la cible de calcul. Il est également stocké dans le cadre de l’expérience dans votre espace de travail. Si vous modifiez des fichiers et que vous envoyez à nouveau le travail, seuls les fichiers modifiés sont chargés.

Pour empêcher que les fichiers inutiles soient inclus dans l’instantané, créez un fichier « ignore» (.gitignore ou .amlignore) dans le répertoire. Ajoutez dans ce fichier les fichiers et répertoires à exclure. Pour plus d’informations sur la syntaxe à utiliser dans ce fichier, consultez syntaxe et modèles pour .gitignore. Le fichier .amlignore utilise la même syntaxe. Si les deux fichiers existent, le fichier .amlignore est utilisé, et non le fichier .gitignore.

Pour plus d’informations sur les instantanés, consultez Instantanés.

Important

Dossiers spéciaux : deux dossiers, outputs et logs, reçoivent un traitement spécial de la part d’Azure Machine Learning. Pendant l’apprentissage, quand vous écrivez des fichiers dans les dossiers nommés outputs et logs qui sont relatifs au répertoire racine (respectivement ./outputs et ./logs), les fichiers sont automatiquement chargés dans votre historique des travaux. Vous pouvez ainsi y accéder une fois le travail terminé.

Pour créer des artefacts pendant l’entraînement (par exemple, des fichiers de modèle, des points de contrôle, des fichiers de données ou des images tracées), écrivez-les dans le dossier ./outputs.

De même, vous pouvez écrire tous les journaux d’activité de votre travail d’apprentissage dans le dossier ./logs. Pour utiliser l’intégration TensorBoard d’Azure Machine Learning, écrivez vos journaux d’activité TensorBoard dans ce dossier. Quand votre travail est en cours, vous pouvez lancer TensorBoard et transmettre ces journaux en continu. Vous pouvez également restaurer les journaux ultérieurement à partir de l’un des travaux précédents.

Par exemple, pour télécharger un fichier écrit dans le dossier outputs sur votre ordinateur local après votre travail d’apprentissage distant : run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')

Intégration et suivi Git

Quand vous démarrez un travail d’apprentissage où le répertoire source est un répertoire Git local, les informations relatives au répertoire sont stockées dans l’historique des travaux. Pour plus d’informations, consultez Obtenir une intégration pour Azure Machine Learning.

Exemples de notebooks

Consultez ces notebooks pour obtenir des exemples de configuration des travaux pour différents scénarios d’apprentissage :

Découvrez comment exécuter des notebooks dans l’article Utiliser des notebooks Jupyter pour explorer ce service.

Résolution des problèmes

  • AttributeError : l’objet « RoundTripLoader »n’a pas d’attribut « comment_handling » : cette erreur provient de la nouvelle version (v 0.17.5) de ruamel-yaml, une dépendance azureml-core qui introduit un changement cassant à azureml-core . Pour corriger cette erreur, désinstallez ruamel-yaml en exécutant pip uninstall ruamel-yaml et en installant une version différente de ruamel-yaml ; les versions prises en charge vont de la v0.15.35 à la v0.17.4 (comprises). Pour ce faire, exécutez pip install "ruamel-yaml>=0.15.35,<0.17.5".

  • Échec du travail avec jwt.exceptions.DecodeError : Message d’erreur exact : jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().

    Envisagez une mise à niveau vers la dernière version d’azureml-core : pip install -U azureml-core.

    If. vous rencontrez ce problème pour des travaux locaux, vérifiez la version de PyJWT installée dans l’environnement où vous démarrez les travaux. Les versions prises en charge de PyJWT sont ultérieures à la version 2.0.0. Désinstallez PyJWT de l’environnement si la version est antérieure à la version 2.0.0. Vous pouvez vérifier la version de PyJWT, désinstaller et installer la version correcte comme suit :

    1. Démarrez un interpréteur de commandes, puis activez l’environnement Conda dans lequel azureml-core est installé.
    2. Entrez pip freeze et recherchez PyJWT. Le cas échéant, la version indiquée doit être antérieure à la version 2.0.0
    3. Si la version indiquée n’est pas une version prise en charge, exécutez pip uninstall PyJWT dans l’interpréteur de commandes et entrez « y » pour confirmer.
    4. Installer à l’aide de pip install 'PyJWT<2.0.0'

    If. vous envoyez un environnement créé par l’utilisateur avec votre travail, vous pouvez utiliser la dernière version d’azureml-core dans cet environnement. Les versions ultérieures à la version 1.18.0 d’azureml-core sont déjà compatibles avec les version de PyJWT antérieures à la version 2.0.0. Si vous devez utiliser une version d’azureml-core antérieure à la version 1.18.0 dans l’environnement que vous envoyez, veillez à spécifier une version de PyJWT antérieure à la version 2.0.0 dans vos dépendances pip.

  • ModuleErrors (aucun module nommé) : Si vous rencontrez des erreurs de module (ModuleErrors) lors de l’envoi d’expériences dans Azure Machine Learning, le script d’entraînement attend qu’un package soit installé, mais il n’est pas ajouté. Une fois que vous avez fourni le nom du package, Azure Machine Learning installe ce dernier dans l’environnement utilisé pour votre travail d’apprentissage.

    If. vous utilisez des Estimateurs pour soumettre des expériences, vous pouvez spécifier un nom de package à l’aide du paramètre pip_packages ou conda_packages dans l’estimateur en fonction de la source à partir de laquelle vous souhaitez installer le package. Vous pouvez également spécifier un fichier yml avec toutes vos dépendances à l’aide de conda_dependencies_file ou répertorier toutes vos exigences PIP dans un fichier txt à l’aide du paramètre pip_requirements_file. Si vous souhaitez remplacer l’image par défaut utilisée par l’estimateur dans votre propre objet d’environnement Azure Machine Learning, vous pouvez spécifier cet environnement par le bais du paramètre environment du constructeur estimateur.

    Les images Docker gérées par Azure Machine Learning et leur contenu sont visibles dans les conteneurs Azure Machine Learning. Les dépendances spécifiques au framework sont listées dans la documentation correspondante du framework :

    Notes

    Si vous pensez qu’un package particulier est suffisamment courant pour être ajouté dans des environnements et images gérés par Azure Machine Learning, signalez un problème GitHub dans Azure Machine Learning Containers.

  • NameError (nom non défini), AttributeError (objet sans attribut) : Cette exception doit provenir de vos scripts d’apprentissage. Vous pouvez consulter les fichiers journaux du portail Azure pour obtenir des informations supplémentaire sur l’erreur de nom non défini ou d’attribut. À partir du Kit de développement logiciel (SDK), vous pouvez utiliser run.get_details() pour examiner le message d’erreur. Cette opération répertorie également tous les fichiers journaux générés pour votre travail. Veillez à examiner votre script d’apprentissage et à corriger l’erreur avant de renvoyer votre travail.

  • Suppression du travail ou de l’expérience : les expériences peuvent être archivées à l’aide de la méthode Experiment.archive ou à partir de la vue d’onglet Expérience dans le client Azure Machine Learning studio via le bouton « Archiver l’expérience ». Cette action masque l’expérience des requêtes et des vues de liste, mais elle ne la supprime pas.

    La suppression définitive d’expériences ou de travaux individuels n’est actuellement pas prise en charge. Pour plus d’informations sur la suppression de ressources d’espace de travail, consultez Exporter ou supprimer vos données d’espace de travail du service Machine Learning.

  • Le document de métriques est trop volumineux : Azure Machine Learning comporte des limites internes sur la taille des objets métriques qui peuvent être consignés simultanément dans un travail d’apprentissage. Si vous rencontrez une erreur « Le document de métrique est trop volumineux » lors de l’enregistrement d’une mesure de liste, essayez de fractionner la liste en segments plus petits, par exemple :

    run.log_list("my metric name", my_metric[:N])
    run.log_list("my metric name", my_metric[N:])
    

    En interne, Azure Machine Learning concatène les blocs portant le même nom d’indicateur de performance dans une liste contiguë.

  • Le démarrage de la cible de calcul prend beaucoup de temps : les images Docker pour les cibles de calcul sont chargées à partir d’Azure Container Registry (ACR). Par défaut, Azure Machine Learning crée un registre ACR du niveau de service De base. Un passage au niveau Standard ou Premium du registre ACR de l’espace de travail est susceptible de réduire le temps nécessaire à la génération et au chargement des images. Pour plus d’informations, consultez Niveaux de service pour Azure Container Registry.

Étapes suivantes