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. Lors de l’exécution d’un script, vous souhaiterez probablement utiliser une cible de calcul qui est évolutive.

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

Créer un cluster de calcul avec le SDK Python

Pour créer un cluster de calcul avec le 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 plus 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 dans le cadre du scale-out de votre cluster de calcul. Le nombre de charges de travail parallèles que votre cluster de calcul peut gérer correspond au nombre de nœuds auquel votre cluster peut être mis à l’échelle.
  • tier : Spécifie si vos machines virtuelles sont basse priorité ou dédiées. L’affectation d’une basse priorité peut réduire les coûts, car la disponibilité n’est pas garantie.

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’un travail de Machine Learning automatisé
  • 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 de former plusieurs modèles en parallèle, ce qui est une pratique courante lors de l’utilisation du Machine Learning automatisé.

Vous pouvez exécuter un travail de pipeline de concepteur et un travail Machine Learning automatisé par le biais d’Azure Machine Learning studio. Lorsque vous envoyez le travail par le biais de 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 axée sur le code, vous pouvez définir la cible de calcul sur votre cluster de calcul à l’aide du 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 l’envoi d’un travail qui utilise un cluster de calcul, celui-ci effectue un scale-out vers 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 le statut est en cours d’exécution, le cluster de calcul est prêt et le travail est en cours d’exécution.