Mettre à niveau des points de terminaison de déploiement vers le SDK v2

Avec SDK/CLI v1, vous pouvez déployer des modèles sur ACI ou AKS en tant que services web. Vos modèles de déploiement et services web v1 existants continuent de fonctionner tels quels, mais l’utilisation du SDK/de la CLI v1 pour déployer des modèles sur ACI ou AKS en tant que services web est désormais considérée comme héritée. Pour les nouveaux déploiements de modèle, nous vous recommandons d’effectuer une mise à niveau vers la version 2.

Dans la version 2, nous offrons des points de terminaison managés ou points de terminaison Kubernetes. Pour une comparaison des versions 1 et 2, consultez la section Points de terminaison et déploiement.

Il existe plusieurs entonnoirs de déploiement tels que les points de terminaison en ligne managés, les points de terminaison en ligne kubernetes (y compris Azure Kubernetes Services et Kubernetes avec Arc) dans la version 2 et les services web Azure Container Instances (ACI) et Kubernetes Services (AKS) dans la version 1. Dans cet article, nous allons essentiellement comparer le déploiement sur les services web ACI (v1) et les points de terminaison en ligne managés (v2).

Les exemples présentés dans cet article montrent comment :

  • Déployer votre modèle sur Azure
  • Définir un score avec le point de terminaison
  • Supprimer le service web/point de terminaison

Créer des ressources d’inférence

  • Kit de développement logiciel (SDK) v1
    1. Configurez un modèle, un environnement et un script de scoring :

      # configure a model. example for registering a model 
      from azureml.core.model import Model
      model = Model.register(ws, model_name="bidaf_onnx", model_path="./model.onnx")
      
      # configure an environment
      from azureml.core import Environment
      env = Environment(name='myenv')
      python_packages = ['nltk', 'numpy', 'onnxruntime']
      for package in python_packages:
          env.python.conda_dependencies.add_pip_package(package)
      
      # configure an inference configuration with a scoring script
      from azureml.core.model import InferenceConfig
      inference_config = InferenceConfig(
          environment=env,
          source_directory="./source_dir",
          entry_script="./score.py",
      )
      
    2. Configurez et déployez un service web ACI :

      from azureml.core.webservice import AciWebservice
      
      # defince compute resources for ACI
      deployment_config = AciWebservice.deploy_configuration(
          cpu_cores=0.5, memory_gb=1, auth_enabled=True
      )
      
      # define an ACI webservice
      service = Model.deploy(
          ws,
          "myservice",
          [model],
          inference_config,
          deployment_config,
          overwrite=True,
      )
      
      # create the service 
      service.wait_for_deployment(show_output=True)
      

Pour plus d’informations sur l’inscription de modèles, consultez Inscrire un modèle à partir d’un fichier local.

  • SDK v2

    1. Configurez un modèle, un environnement et un script de scoring :

      from azure.ai.ml.entities import Model
      # configure a model
      model = Model(path="../model-1/model/sklearn_regression_model.pkl")
      
      # configure an environment
      from azure.ai.ml.entities import Environment
      env = Environment(
          conda_file="../model-1/environment/conda.yml",
          image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1",
      )
      
      # configure an inference configuration with a scoring script
      from azure.ai.ml.entities import CodeConfiguration
      code_config = CodeConfiguration(
              code="../model-1/onlinescoring", scoring_script="score.py"
          )
      
    2. Configurez et créez un point de terminaison en ligne :

      import datetime
      from azure.ai.ml.entities import ManagedOnlineEndpoint
      
      # create a unique endpoint name with current datetime to avoid conflicts
      online_endpoint_name = "endpoint-" + datetime.datetime.now().strftime("%m%d%H%M%f")
      
      # define an online endpoint
      endpoint = ManagedOnlineEndpoint(
          name=online_endpoint_name,
          description="this is a sample online endpoint",
          auth_mode="key",
          tags={"foo": "bar"},
      )
      
      # create the endpoint:
      ml_client.begin_create_or_update(endpoint)
      
    3. Configurez et créez un déploiement en ligne :

      from azure.ai.ml.entities import ManagedOnlineDeployment
      
      # define a deployment
      blue_deployment = ManagedOnlineDeployment(
          name="blue",
          endpoint_name=online_endpoint_name,
          model=model,
          environment=env,
          code_configuration=code_config,
          instance_type="Standard_F2s_v2",
          instance_count=1,
      )
      
      # create the deployment:
      ml_client.begin_create_or_update(blue_deployment)
      
      # blue deployment takes 100 traffic
      endpoint.traffic = {"blue": 100}
      ml_client.begin_create_or_update(endpoint)
      

Pour plus d’informations sur les concepts de points de terminaison et de déploiements, consultez Que sont les points de terminaison en ligne ?.

Soumettre une demande

  • Kit de développement logiciel (SDK) v1

    import json
    data = {
        "query": "What color is the fox",
        "context": "The quick brown fox jumped over the lazy dog.",
    }
    data = json.dumps(data)
    predictions = service.run(input_data=data)
    print(predictions)
    
  • SDK v2

    # test the endpoint (the request will route to blue deployment as set above)
    ml_client.online_endpoints.invoke(
        endpoint_name=online_endpoint_name,
        request_file="../model-1/sample-request.json",
    )
    
    # test the specific (blue) deployment
    ml_client.online_endpoints.invoke(
        endpoint_name=online_endpoint_name,
        deployment_name="blue",
        request_file="../model-1/sample-request.json",
    )
    

Supprimer des ressources

  • Kit de développement logiciel (SDK) v1

    service.delete()
    
  • SDK v2

    ml_client.online_endpoints.begin_delete(name=online_endpoint_name)
    

Mappage des fonctionnalités clés dans le SDK v1 et le SDK v2

Fonctionnalités dans le SDK v1 Mappage approximatif dans le SDK v2
Classe azureml.core.model.Model Classe azure.ai.ml.entities.Model
Classe azureml.core.Environment Classe azure.ai.ml.entities.Environment
Classe azureml.core.model.InferenceConfig Classe azure.ai.ml.entities.CodeConfiguration
Classe azureml.core.webservice.AciWebservice Classe azure.ai.ml.entities.OnlineDeployment (et classe azure.ai.ml.entities.ManagedOnlineEndpoint)
Model.deploy ou Webservice.deploy ml_client.begin_create_or_update(online_deployment)
Webservice.run ml_client.online_endpoints.invoke
Webservice.delete ml_client.online_endpoints.delete

Pour plus d'informations, consultez la rubrique

Documentation v2 :

Documentation v1 :