azure-ai-ml-py

npx skills add https://github.com/microsoft/skills --skill azure-ai-ml-py

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

  1. Utiliser le versioning pour les données, modèles et environnements
  2. Configurer le scale-down à l'inactivité pour réduire les coûts de calcul
  3. Utiliser les environnements pour un entraînement reproductible
  4. Streamer les logs des jobs pour surveiller la progression
  5. Enregistrer les modèles après les jobs d'entraînement réussis
  6. Utiliser les pipelines pour les workflows multi-étapes
  7. Tagger les ressources pour l'organisation et le suivi des coûts

Skills similaires