Entraîner des modèles scikit-learn à grande échelle avec le SDK Azure Machine Learning (v1)
S’APPLIQUE À : SDK Python azureml v1
Dans cet article, découvrez comment exécuter vos scripts de formation scikit-learn sur Azure Machine Learning.
Dans cet article, les exemples de scripts classifient les images de fleurs d'iris afin de créer un modèle d'apprentissage automatique basé sur le jeu de données iris de scikit-learn.
Que vous soyez en train d’entraîner un modèle Machine Learning scikit-Learn à partir de zéro ou que vous transfériez un modèle existant dans le cloud, vous pouvez utiliser Azure Machine Learning pour effectuer un scale-out des travaux d’apprentissage open source à l’aide de ressources de calcul élastiques dans le cloud. Vous pouvez créer, déployer, mettre à jour et surveiller des modèles de niveau production avec Azure Machine Learning.
Prérequis
Vous pouvez exécuter ce code dans une instance de calcul Azure Machine Learning ou dans votre propre notebook Jupyter :
Instance de calcul Azure Machine Learning
- Suivez le guide Démarrage rapide : Bien démarrer avec Azure Machine Learning pour créer une instance de calcul. Chaque instance de calcul comprend un serveur de notebooks dédié préchargé avec le SDK et le dépôt d’exemples de notebooks.
- Sélectionnez l’onglet Notebook dans Azure Machine Learning studio. Dans le dossier d’entraînement d’exemples, recherchez un notebook finalisé et développé en accédant à ce répertoire : dossier how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn.
- Vous pouvez utiliser le code prérempli dans le dossier d’entraînement d’exemples pour suivre ce tutoriel.
Créez un serveur de notebooks Jupyter et exécutez le code des sections suivantes.
Configurer l’expérience
Cette section configure l’expérience de formation via le chargement des packages Python requis, l’initialisation d’un espace de travail, la définition de l’environnement de formation et la préparation du script de formation.
Initialiser un espace de travail
L’espace de travail Azure Machine Learning est la ressource de niveau supérieur du service. Il vous fournit un emplacement centralisé dans lequel utiliser tous les artefacts que vous créez. Dans le kit de développement logiciel (SDK) Python, vous pouvez accéder aux artefacts de l’espace de travail en créant un objet workspace
.
Créez un objet d’espace de travail à partir du fichier config.json
créé dans la section Conditions préalables.
from azureml.core import Workspace
ws = Workspace.from_config()
Préparer les scripts
Dans ce tutoriel, le script d’entraînement train_iris.py est déjà fourni. Dans la pratique, vous devez être capable de prendre n’importe quel script de formation personnalisé et de l’exécuter avec Azure Machine Learning sans avoir à modifier votre code.
Notes
- Le script d’entraînement fourni montre comment journaliser certains indicateurs de performance dans votre exécution Azure Machine Learning en utilisant l’objet
Run
dans le script. - Le script d’entraînement fourni utilise les exemples de données de la fonction
iris = datasets.load_iris()
. Pour utiliser vos propres données et y accéder, découvrez comment effectuer l’apprentissage avec des jeux de données pour rendre les données disponibles pendant la formation.
Définir votre environnement
Pour définir l’environnement Azure Machine Learning qui encapsule les dépendances de votre script de formation, vous pouvez définir un environnement personnalisé ou utiliser un environnement Azure Machine Learning organisé.
Utiliser un environnement organisé
Le cas échéant, Azure Machine Learning fournit des environnements prédéfinis et organisés si vous ne souhaitez pas définir votre propre environnement.
Si vous souhaitez utiliser un environnement organisé, vous pouvez exécuter la commande suivante à la place :
from azureml.core import Environment
sklearn_env = Environment.get(workspace=ws, name='AzureML-Tutorial')
Créer un environnement personnalisé
Vous pouvez également créer votre propre environnement personnalisé. Définissez vos dépendances conda dans un fichier YAML ; dans cet exemple, le fichier est nommé conda_dependencies.yml
.
dependencies:
- python=3.7
- scikit-learn
- numpy
- pip:
- azureml-defaults
Créez un environnement Azure Machine Learning à partir de cette spécification de l’environnement Conda. L’environnement sera empaqueté dans un conteneur Docker au moment de l’exécution.
from azureml.core import Environment
sklearn_env = Environment.from_conda_specification(name='sklearn-env', file_path='conda_dependencies.yml')
Pour plus d’informations sur la création et l’utilisation d’environnements, consultez Créer et utiliser des environnements logiciels dans Azure Machine Learning.
Configurer et envoyer votre exécution d’entrainement
Créer un ScriptRunConfig
Créez un objet ScriptRunConfig pour spécifier les détails de configuration de votre travail d’entraînement, y compris votre script d’entraînement, l’environnement à utiliser et la cible de calcul sur laquelle effectuer l’exécution.
Les arguments de votre script d’entrainement sont transmis via la ligne de commande s’ils sont spécifiés dans le paramètre arguments
.
Le code suivant configure un objet ScriptRunConfig pour l’envoi de votre tâche en vue de son exécution sur votre ordinateur local.
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory='.',
script='train_iris.py',
arguments=['--kernel', 'linear', '--penalty', 1.0],
environment=sklearn_env)
Si vous souhaitez exécuter à la place votre tâche sur un cluster distant, vous pouvez spécifier la cible de calcul souhaitée pour le paramètre compute_target
de ScriptRunConfig.
from azureml.core import ScriptRunConfig
compute_target = ws.compute_targets['<my-cluster-name>']
src = ScriptRunConfig(source_directory='.',
script='train_iris.py',
arguments=['--kernel', 'linear', '--penalty', 1.0],
compute_target=compute_target,
environment=sklearn_env)
Envoyer votre exécution
from azureml.core import Experiment
run = Experiment(ws,'Tutorial-TrainIRIS').submit(src)
run.wait_for_completion(show_output=True)
Avertissement
Azure Machine Learning exécute des scripts d’apprentissage en copiant l’intégralité du répertoire source. Si vous avez des données sensibles que vous ne souhaitez pas charger, utilisez un fichier .ignore ou ne l’incluez pas dans le répertoire source. Au lieu de cela, accédez à vos données à l’aide d’un jeu de données Azure Machine Learning.
Ce qui se passe lors de l’exécution
Quand l’exécution est lancée, elle passe par les phases suivantes :
Préparation : une image docker est créée en fonction de l’environnement défini. L’image est chargée dans le registre de conteneurs de l’espace de travail et mise en cache pour des exécutions ultérieures. Les journaux sont également transmis en continu à l’historique des exécutions et peuvent être affichés afin de surveiller la progression. Si un environnement organisé est spécifié à la place, l’image mise en cache qui stocke cet environnement organisé est utilisée.
Mise à l’échelle : le cluster tente de monter en puissance si le cluster Batch AI nécessite plus de nœuds pour l’exécution que la quantité disponible actuellement.
En cours d’exécution : tous les scripts dans le dossier de script sont chargés dans la cible de calcul, les magasins de données sont montés ou copiés, puis
script
est exécuté. Les sorties issues de stdout et du dossier ./logs sont transmises en continu à l’historique des exécutions et peuvent être utilisées pour superviser l’exécution.Post-traitement : le dossier ./outputs de l’exécution est copié dans l’historique des exécutions.
Télécharger et enregistrer le modèle
Une fois que vous avez entraîné le modèle, vous pouvez l’enregistrer et l’inscrire sur votre espace de travail. L’inscription du modèle vous permet de stocker vos modèles et de suivre leurs versions dans votre espace de travail afin de simplifier la gestion et le déploiement des modèles.
Ajoutez le code suivant à votre script de formation, train_iris.py, pour enregistrer le modèle.
import joblib
joblib.dump(svm_model_linear, 'model.joblib')
Inscrivez le modèle sur votre espace de travail avec le code suivant. En spécifiant les paramètres model_framework
, model_framework_version
et resource_configuration
, le modèle de déploiement sans code devient disponible. Le modèle de déploiement sans code vous permet de déployer directement votre modèle en tant que service web à partir du modèle inscrit, et l’objet ResourceConfiguration
définit la ressource de calcul pour le service web.
from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration
model = run.register_model(model_name='sklearn-iris',
model_path='outputs/model.joblib',
model_framework=Model.Framework.SCIKITLEARN,
model_framework_version='0.19.1',
resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))
Déploiement
Le modèle que vous venez d’inscrire peut être déployé exactement de la même façon que n’importe quel autre modèle inscrit dans Azure Machine Learning. Le guide pratique de déploiement contient une section sur l’inscription des modèles, mais vous pouvez passer directement à la [création d’une cible de calcul how-to-deploy-and-where.md#choose-a-compute-target] pour le déploiement, car vous disposez déjà d’un modèle inscrit.
(Préversion) Modèle de déploiement sans code
Important
Cette fonctionnalité est actuellement disponible en préversion publique. Cette préversion est fournie sans contrat de niveau de service et n’est pas recommandée pour les charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge.
Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.
Au lieu de la route de déploiement traditionnelle, vous pouvez également utiliser la fonctionnalité de déploiement sans code (préversion) pour scikit-learn. Le modèle de déploiement sans code est pris en charge pour tous les types de modèles scikit-learn intégrés. En inscrivant votre modèle comme indiqué ci-dessus avec les paramètres model_framework
, model_framework_version
et resource_configuration
, vous pouvez simplement utiliser la fonction statique deploy()
pour déployer votre modèle.
web_service = Model.deploy(ws, "scikit-learn-service", [model])
Notes
Ces dépendances sont incluses dans le conteneur d’inférence scikit-learn prédéfini.
- azureml-defaults
- inference-schema[numpy-support]
- scikit-learn
- numpy
Le guide pratique complet couvre de manière plus approfondie le déploiement dans Azure Machine Learning.
Étapes suivantes
Dans cet article, vous avez entraîné et inscrit un modèle scikit-learn, et vous avez découvert les options de déploiement. Consultez ces autres articles pour en savoir plus sur Azure Machine Learning.