Créer et utiliser un cluster de calcul

Effectué

Après l’expérimentation et le développement, vous souhaitez que votre code soit prêt pour la production. Lorsque vous exécutez du code dans des environnements de production, il est préférable d’utiliser des scripts plutôt que des notebooks. Lorsque vous exécutez un script, vous souhaitez utiliser une cible de calcul évolutive.

Dans Azure Machine Learning, les clusters de calcul sont idéaux pour l’exécution de scripts. Vous pouvez créer un cluster de calcul dans Azure Machine Learning Studio, à l’aide de l’interface de ligne de commande Azure (CLI) ou du kit de développement logiciel Python (SDK).

Créer un cluster de calcul avec le Kit de développement logiciel (SDK) Python

Pour créer un cluster de calcul avec le Kit de développement logiciel (SDK) Python, vous pouvez utiliser le code suivant :

from azure.ai.ml.entities import AmlCompute

cluster_basic = AmlCompute(
    name="cpu-cluster",
    type="amlcompute",
    size="STANDARD_DS3_v2",
    location="westus",
    min_instances=0,
    max_instances=2,
    idle_time_before_scale_down=120,
    tier="low_priority",
)
ml_client.begin_create_or_update(cluster_basic).result()

Pour comprendre les paramètres attendus par la classe AmlCompute, vous pouvez consulter la documentation de référence .

Lorsque vous créez un cluster de calcul, vous devez prendre en compte trois paramètres principaux :

  • size: spécifie le type de machine virtuelle de chaque nœud au sein du cluster de calcul. Ce paramètre dépend des tailles des machines virtuelles dans Azure. En regard de la taille, vous pouvez également spécifier si vous souhaitez utiliser des PROCESSEURs ou des GPU.
  • max_instances: spécifie le nombre maximal de nœuds vers lesquels votre cluster de calcul peut effectuer un scale-out. Le nombre de charges de travail parallèles que votre cluster de calcul peut gérer est analogue au nombre de nœuds vers lesquels votre cluster peut être mis à l’échelle.
  • tier: spécifie si vos machines virtuelles sont de faible priorité ou dédiées. La définition d’une priorité faible peut réduire les coûts, car vous n’êtes pas garanti en disponibilité.

Utiliser un cluster de calcul

Il existe trois scénarios principaux dans lesquels vous pouvez utiliser un cluster de calcul :

  • Exécution d’un travail de pipeline que vous avez créé dans le concepteur
  • Exécution d’une tâche de Machine Learning automatisée.
  • Exécution d’un script en tant que travail.

Dans chacun de ces scénarios, un cluster de calcul est idéal, car il est automatiquement mis à l’échelle lors de l’envoi d’un travail, et s’arrête automatiquement à la fin d’un travail.

Un cluster de calcul vous permet également d’entraîner plusieurs modèles en parallèle, ce qui est une pratique courante lors de l’utilisation de Machine Learning automatisé.

Vous pouvez exécuter un travail de pipeline concepteur et un travail Machine Learning automatisé via Azure Machine Learning Studio. Lorsque vous envoyez le travail via le studio, vous pouvez définir la cible de calcul sur le cluster de calcul que vous avez créé.

Lorsque vous préférez une approche code-first, vous pouvez définir la cible de calcul sur votre cluster de calcul à l’aide du Kit de développement logiciel (SDK) Python.

Par exemple, lorsque vous exécutez un script en tant que travail de commande, vous pouvez définir la cible de calcul sur votre cluster de calcul avec le code suivant :

from azure.ai.ml import command

# configure job
job = command(
    code="./src",
    command="python diabetes-training.py",
    environment="AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest",
    compute="cpu-cluster",
    display_name="train-with-cluster",
    experiment_name="diabetes-training"
    )

# submit job
returned_job = ml_client.create_or_update(job)
aml_url = returned_job.studio_url
print("Monitor your job at", aml_url)

Après avoir soumis un travail utilisant un cluster de calcul, celui-ci s'étend à un ou plusieurs nœuds. Le redimensionnement prend quelques minutes, et votre travail commence à s’exécuter une fois que les nœuds nécessaires sont provisionnés. Lorsque le statut d’un travail est en cours de préparation, le cluster de calcul est en cours de préparation. Lorsque l’état est en cours d’exécution, le cluster de calcul est prêt et le travail est en cours d’exécution.