Étape 4 : entraîner un modèle - Amazon SageMaker

Étape 4 : entraîner un modèle

Le kit SDK Amazon SageMaker Python fournit des estimateurs de cadre et des estimateurs génériques pour entraîner votre modèle tout en orchestrant le cycle de vie de machine learning (ML) en accédant aux fonctions SageMaker pour l'entraînement et les infrastructures AWS, telles qu'Amazon Elastic Container Registry (Amazon ECR), Amazon Elastic Compute Cloud (Amazon EC2) et Amazon Simple Storage Service (Amazon S3). Pour de plus amples informations sur les estimateurs de cadre intégrés SageMaker et les estimateurs d'algorithmes, veuillez consulter respectivement Frameworks (Cadres) et First-Party Algorithms (Algorithmes de première partie) dans le kit SDK Amazon SageMaker Python.

Choisir l'algorithme d'entraînement

Pour choisir le bon algorithme pour votre jeu de données, vous devez généralement évaluer différents modèles afin de trouver les modèles les plus adaptés à vos données. Pour plus de simplicité, l'algorithme intégré Algorithme XGBoost de SageMaker est utilisé tout au long de ce tutoriel sans l'évaluation préalable des modèles.

Astuce

Si vous souhaitez que SageMaker trouve un modèle approprié pour votre jeu de données tabulaire, utilisez Amazon SageMaker Autopilot qui automatise une solution de machine learning. Pour de plus amples informations, veuillez consulter . Automatiser le développement de modèles avec Amazon SageMaker Autopilot.

Créer et exécuter une tâche d'entraînement

Après avoir trouvé le modèle à utiliser, commencez à créer un estimateur SageMaker pour l'entraînement. Ce didacticiel utilise l'algorithme intégré XGBoost pour l'estimateur générique SageMaker.

Pour exécuter une tâche d'entraînement du modèle

  1. Importez le kit SDK Amazon SageMaker Python et commencez par extraire les informations de base de votre session SageMaker actuelle.

    import sagemaker region = sagemaker.Session().boto_region_name print("AWS Region: {}".format(region)) role = sagemaker.get_execution_role() print("RoleArn: {}".format(role))

    Cela renvoie les informations suivantes :

    • region – La région AWS actuelle dans laquelle l'instance de bloc-notes SageMaker est en cours d'exécution.

    • role – Le rôle IAM utilisé par l'instance de bloc-notes.

    Note

    Vérifiez la version du kit SDK SageMaker Python en exécutant sagemaker.__version__. Ce didacticiel est basé sur sagemaker>=2.20. Si le kit SDK est obsolète, installez la dernière version en exécutant la commande suivante :

    ! pip install -qU sagemaker

    Si vous exécutez cette installation dans vos instances SageMaker Studio ou de bloc-notes existantes, vous devez actualiser manuellement le noyau pour finaliser l'application de la mise à jour de version.

  2. Créez un estimateur XGBoost à l'aide de la classe sagemaker.estimator.Estimator. Dans l'exemple de code suivant, l'estimateur XGBoost se nomme xgb_model.

    from sagemaker.debugger import Rule, rule_configs from sagemaker.session import TrainingInput s3_output_location='s3://{}/{}/{}'.format(bucket, prefix, 'xgboost_model') container=sagemaker.image_uris.retrieve("xgboost", region, "1.2-1") print(container) xgb_model=sagemaker.estimator.Estimator( image_uri=container, role=role, instance_count=1, instance_type='ml.m4.xlarge', volume_size=5, output_path=s3_output_location, sagemaker_session=sagemaker.Session(), rules=[Rule.sagemaker(rule_configs.create_xgboost_report())] )

    Pour construire l'estimateur SageMaker, spécifiez les paramètres suivants :

    • image_uri – Spécifiez l'URI de l'image du conteneur d'entraînement. Dans cet exemple, l'URI du conteneur d'entraînement SageMaker XGBoost est spécifié à l'aide de sagemaker.image_uris.retrieve.

    • role – Rôle AWS Identity and Access Management (IAM) que SageMaker utilise pour exécuter des tâches en votre nom (par exemple, lecture des résultats d'entraînement, appelés artefacts de modèle, depuis Amazon S3, et écriture de ces derniers sur Amazon S3).

    • instance_count et instance_type – Type et nombre d'instances de calcul de ML Amazon EC2 à utiliser pour l'entraînement du modèle. Dans le cadre de cet exercice d'entraînement, vous utilisez une instance ml.m4.xlarge unique, qui dispose de 4 processeurs, de 16 Go de mémoire, d'un stockage Amazon Elastic Block Store (Amazon EBS) et de performances réseau élevées. Pour de plus amples informations sur les types d'instance de calcul EC2 pris en charge, veuillez consulter Types d'instance Amazon EC2. Pour de plus amples informations sur la facturation, veuillez consulter Tarification Amazon SageMaker.

    • volume_size – Taille, en Go, du volume de stockage EBS à attacher à l'instance d'entraînement. Elle doit être suffisamment importante pour stocker des données d'entraînement si vous utilisez le mode File (le mode File est activé par défaut).

    • output_path – Le chemin d'accès au compartiment S3 où SageMaker stocke l'artefact de modèle et les résultats d'entraînement.

    • sagemaker_session – L'objet de session qui gère les interactions avec les opérations d'API SageMaker et tout autre service AWS que la tâche d'entraînement utilise.

    • rules – Spécifie la liste des règles intégrées de SageMaker Debugger. Dans cet exemple, la règle create_xgboost_report() crée un rapport XGBoost qui fournit des informations sur la progression et les résultats de l'entraînement. Pour de plus amples informations, veuillez consulter . Rapport d'entraînement XGBoost SageMaker Debugger.

    Astuce

    Si vous souhaitez exécuter un entraînement distribué sur des modèles de deep learning de grande taille, tels que les réseaux neuronaux convolutionaux (CNN) et les modèles de traitement du langage naturel (NLP), utilisez SageMaker Distributed pour le parallélisme des données ou le parallélisme des modèles. Pour de plus amples informations, veuillez consulter . Bibliothèques d'entraînement distribué Amazon SageMaker.

  3. Définissez les hyperparamètres pour l'algorithme XGBoost en appelant la méthode set_hyperparameters de l'estimateur. Pour obtenir la liste complète des hyperparamètres XGBoost, veuillez consulter Hyperparamètres XGBoost.

    xgb_model.set_hyperparameters( max_depth = 5, eta = 0.2, gamma = 4, min_child_weight = 6, subsample = 0.7, objective = "binary:logistic", num_round = 1000 )
    Astuce

    Vous pouvez également régler les hyperparamètres à l'aide de la fonction d'optimisation des hyperparamètres de SageMaker. Pour de plus amples informations, veuillez consulter . Réglage de modèle automatique avec SageMaker.

  4. Utilisation de la classe TrainingInput pour configurer un flux d'entrée de données pour l'entraînement. L'exemple de code suivant montre comment configurer des objets TrainingInput pour utiliser les jeux de données d'entraînement et de validation que vous avez chargés sur Amazon S3 dans la section Diviser le jeu de données en jeux de données d'entraînement, de validation et de test.

    from sagemaker.session import TrainingInput train_input = TrainingInput( "s3://{}/{}/{}".format(bucket, prefix, "data/train.csv"), content_type="csv" ) validation_input = TrainingInput( "s3://{}/{}/{}".format(bucket, prefix, "data/validation.csv"), content_type="csv" )
  5. Pour démarrer l'entraînement du modèle, appelez la méthode fit de l'estimateur avec les jeux de données d'entraînement et de validation. En définissant wait=True, la méthode fit affiche les journaux de progression et attend que l'entraînement se termine.

    xgb_model.fit({"train": train_input, "validation": validation_input}, wait=True)

    Pour de plus amples informations sur l'entraînement de modèle, veuillez consulter Entraînement d'un modèle dans Amazon SageMaker. Cette tâche d'entraînement de tutoriel peut prendre jusqu'à 10 minutes.

    Une fois la tâche d'entraînement terminée, vous pouvez télécharger un rapport d'entraînement XGBoost et un rapport de profilage généré par SageMaker Debugger. Le rapport d'entraînement XGBoost vous offre des informations sur la progression et les résultats de l'entraînement, telles que la fonction de perte en lien avec l'itération, l'importance de la fonction, la matrice de confusion, les courbes de précision et d'autres résultats statistiques de l'entraînement. Par exemple, vous pouvez trouver la courbe de perte suivante à partir du rapport d'entraînement XGBoost qui indique clairement qu'il y a un problème de surajustement.

    Exécutez le code suivant pour spécifier l'URI du compartiment S3 dans lequel les rapports d'entraînement de Debugger sont générés et vérifiez si les rapports existent.

    rule_output_path = xgb_model.output_path + "/" + xgb_model.latest_training_job.name + "/rule-output" ! aws s3 ls {rule_output_path} --recursive

    Téléchargez les rapports d'entraînement et de profilage Debugger XGBoost dans l'espace de travail actuel :

    ! aws s3 cp {rule_output_path} ./ --recursive

    Exécutez le script IPython suivant pour obtenir le lien de fichier du rapport d'entraînement XGBoost :

    from IPython.display import FileLink, FileLinks display("Click link below to view the XGBoost Training report", FileLink("CreateXgboostReport/xgboost_report.html"))

    Le script IPython suivant renvoie le lien de fichier du rapport de profilage Debugger qui affiche les résumés et les détails de l'utilisation des ressources d'instance EC2, des résultats de détection de goulot d'étranglement système et des résultats de profilage d'opération de Python :

    profiler_report_name = [rule["RuleConfigurationName"] for rule in xgb_model.latest_training_job.rule_job_summary() if "Profiler" in rule["RuleConfigurationName"]][0] profiler_report_name display("Click link below to view the profiler report", FileLink(profiler_report_name+"/profiler-output/profiler-report.html"))
    Astuce

    Si les rapports HTML ne rendent pas les tracés dans la vue JupyterLab, vous devez choisir Trust HTML (Faire confiance à l'HTML) en haut des rapports.

    Pour identifier les problèmes d'entraînement, tels que le surajustement, la disparition des gradients et d'autres problèmes qui empêchent votre modèle de converger, utilisez SageMaker Debugger et effectuez des actions automatisées lors du prototypage et de l'entraînement de vos modèles de ML. Pour de plus amples informations, veuillez consulter . Amazon SageMaker Debugger. Pour obtenir une analyse complète des paramètres du modèle, reportez-vous à l'exemple de bloc-notes Explicabilité avec Amazon SageMaker Debugger.

Vous venez d'entraîner un modèle XGBoost. SageMaker stocke l'artefact du modèle dans votre compartiment S3. Pour trouver l'emplacement de l'artefact du modèle, exécutez le code suivant pour imprimer l'attribut model_data de l'estimateur xgb_model :

xgb_model.model_data
Astuce

Pour mesurer les biais qui peuvent se produire à chaque étape du cycle de vie de ML (collecte de données, entraînement du modèle et réglage, surveillance des modèles de ML déployés à des fins de prédiction), utilisez SageMaker Clarify. Pour de plus amples informations, veuillez consulter . Explicabilité du modèle. Pour obtenir un exemple de bout en bout, veuillez consulter l'exemple de bloc-notes Équité et explicabilité avec SageMaker Clarify.