Azure Machine Learning SDK v2 pour Python
Bibliothèque cliente pour gérer les ressources Azure ML : espaces de travail, jobs, modèles, données et calcul.
Installation
pip install azure-ai-ml
Variables d'environnement
AZURE_SUBSCRIPTION_ID=<your-subscription-id> # Requis pour toutes les méthodes d'authentification
AZURE_RESOURCE_GROUP=<your-resource-group> # Requis pour toutes les méthodes d'authentification
AZURE_ML_WORKSPACE_NAME=<your-workspace-name> # Requis pour toutes les méthodes d'authentification
AZURE_TOKEN_CREDENTIALS=prod # Requis uniquement si DefaultAzureCredential est utilisé en production
Authentification
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
import os
# Dev local : DefaultAzureCredential. Production : définir AZURE_TOKEN_CREDENTIALS=prod ou AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Ou utiliser une credential spécifique directement en production :
# Voir https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
ml_client = MLClient(
credential=credential,
subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"],
resource_group_name=os.environ["AZURE_RESOURCE_GROUP"],
workspace_name=os.environ["AZURE_ML_WORKSPACE_NAME"]
)
À partir d'un fichier de configuration
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
# Utilise config.json dans le répertoire courant ou parent
ml_client = MLClient.from_config(
credential=DefaultAzureCredential()
)
Gestion des espaces de travail
Créer un espace de travail
from azure.ai.ml.entities import Workspace
ws = Workspace(
name="my-workspace",
location="eastus",
display_name="My Workspace",
description="ML workspace for experiments",
tags={"purpose": "demo"}
)
ml_client.workspaces.begin_create(ws).result()
Lister les espaces de travail
for ws in ml_client.workspaces.list():
print(f"{ws.name}: {ws.location}")
Actifs de données
Enregistrer des données
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
# Enregistrer un fichier
my_data = Data(
name="my-dataset",
version="1",
path="azureml://datastores/workspaceblobstore/paths/data/train.csv",
type=AssetTypes.URI_FILE,
description="Training data"
)
ml_client.data.create_or_update(my_data)
Enregistrer un dossier
my_data = Data(
name="my-folder-dataset",
version="1",
path="azureml://datastores/workspaceblobstore/paths/data/",
type=AssetTypes.URI_FOLDER
)
ml_client.data.create_or_update(my_data)
Registre de modèles
Enregistrer un modèle
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
model = Model(
name="my-model",
version="1",
path="./model/",
type=AssetTypes.CUSTOM_MODEL,
description="My trained model"
)
ml_client.models.create_or_update(model)
Lister les modèles
for model in ml_client.models.list(name="my-model"):
print(f"{model.name} v{model.version}")
Calcul
Créer un cluster de calcul
from azure.ai.ml.entities import AmlCompute
cluster = AmlCompute(
name="cpu-cluster",
type="amlcompute",
size="Standard_DS3_v2",
min_instances=0,
max_instances=4,
idle_time_before_scale_down=120
)
ml_client.compute.begin_create_or_update(cluster).result()
Lister les ressources de calcul
for compute in ml_client.compute.list():
print(f"{compute.name}: {compute.type}")
Jobs
Job de commande
from azure.ai.ml import command, Input
job = command(
code="./src",
command="python train.py --data ${{inputs.data}} --lr ${{inputs.learning_rate}}",
inputs={
"data": Input(type="uri_folder", path="azureml:my-dataset:1"),
"learning_rate": 0.01
},
environment="AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
compute="cpu-cluster",
display_name="training-job"
)
returned_job = ml_client.jobs.create_or_update(job)
print(f"Job URL: {returned_job.studio_url}")
Surveiller un job
ml_client.jobs.stream(returned_job.name)
Pipelines
from azure.ai.ml import dsl, Input, Output
from azure.ai.ml.entities import Pipeline
@dsl.pipeline(
compute="cpu-cluster",
description="Training pipeline"
)
def training_pipeline(data_input):
prep_step = prep_component(data=data_input)
train_step = train_component(
data=prep_step.outputs.output_data,
learning_rate=0.01
)
return {"model": train_step.outputs.model}
pipeline = training_pipeline(
data_input=Input(type="uri_folder", path="azureml:my-dataset:1")
)
pipeline_job = ml_client.jobs.create_or_update(pipeline)
Environnements
Créer un environnement personnalisé
from azure.ai.ml.entities import Environment
env = Environment(
name="my-env",
version="1",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
conda_file="./environment.yml"
)
ml_client.environments.create_or_update(env)
Datastores
Lister les datastores
for ds in ml_client.datastores.list():
print(f"{ds.name}: {ds.type}")
Obtenir le datastore par défaut
default_ds = ml_client.datastores.get_default()
print(f"Default: {default_ds.name}")
Opérations MLClient
| Propriété | Opérations |
|---|---|
workspaces |
create, get, list, delete |
jobs |
create_or_update, get, list, stream, cancel |
models |
create_or_update, get, list, archive |
data |
create_or_update, get, list |
compute |
begin_create_or_update, get, list, delete |
environments |
create_or_update, get, list |
datastores |
create_or_update, get, list, get_default |
components |
create_or_update, get, list |
Bonnes pratiques
- Utiliser le versioning pour les données, modèles et environnements
- Configurer le scale-down à l'inactivité pour réduire les coûts de calcul
- Utiliser les environnements pour un entraînement reproductible
- Streamer les logs des jobs pour surveiller la progression
- Enregistrer les modèles après les jobs d'entraînement réussis
- Utiliser les pipelines pour les workflows multi-étapes
- Tagger les ressources pour l'organisation et le suivi des coûts